0

我真的無法繞過Rails 4強大的參數,belongs_to關聯和form_for形式。Rails 4:strong_params,nested_attributes_for和belongs_to關聯問題

想象我有型號爲引用一些價格:

class Quote < ActiveRecord::Base 
    belongs_to :fee 
    accepts_nested_attributes_for :fee 

現在,我已經播種一些費用到數據庫,並使用fields_for已經把一些單選按鈕在我form_for @quote。單選按鈕的值只是記錄的ID。

這是令人不安的部分,控制器:

def create 
    @quote = Quote.new(quote_params) 
    ... 

end 

def quote_params 
    params.require(:quote).permit(:amount_from, fee_attributes: [:id]) 
end 

從我的理解,自動的Rails的應該有一些ID取費紀錄,但有一些神祕的錯誤信息。

PARAMS哈希值是:"quote"=>{"amount_from"=>"1200", "fee_attributes"=>{"id"=>"1"}}

日誌結尾:

Completed 404 Not Found in 264ms 

ActiveRecord::RecordNotFound (Couldn't find Fee with ID=1 for Quote with ID=) 
    app/controllers/quotes_controller.rb:14:in `create' 

我真的不明白是怎麼回事,看了Rails的協會指導,用Google搜索小時,所有的信息,但徒勞無功。

我想在這裏實現的是理解正確的「Rails方式」,以獲取一些新的Quote對象的關聯使用我已經放在窗體中的一些參數。

回答

0

猜猜我得到nested_attributes_for錯誤,不知何故認爲它會自動調用Fee.find。 我選擇了從形式開溝fields_for傭工和手動渲染領域,如

radio_button_tag 'fee[id]', fee.id

然後在控制器我有2點PARAMS現在的方法:

def quote_params 
    params.require(:quote).permit(:amount_from) 
    end 

    def fee_params 
    params.require(:fee).permit(:id) 
    end 

我的行動看起來像

def create 
    @quote = Quote.new(quote_params) 
    @quote.fee = Fee.find(fee_params[:id]) 
    ... 

任何增加的最佳實踐,當一個人不得不處理大量不同的對象時, t init邏輯是受歡迎的。