我真的无法理解Rails 4强大的参数,belongs_to association和form with fields_for。
想象一下,我有引用某些价格的模型:
class Quote < ActiveRecord::Base
belongs_to :fee
accepts_nested_attributes_for :fee
现在,我已经在db中添加了一些费用,并使用fields_for在我的form_for @quote
上添加了一些radiobuttons。 radiobuttons的值只是记录的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 hash是:"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协会指南,用谷歌搜索所有信息,但无济于事。
我想在这里实现的是理解正确的“Rails方式”,使用我在表单中添加的一些参数来获取新Quote对象的一些关联。
答案 0 :(得分:0)
猜猜我得了nested_attributes_for错误,不知何故以为它会自动调用Fee.find。 我已选择从表单中删除fields_for帮助程序并手动渲染字段,如
radio_button_tag 'fee[id]', fee.id
然后在控制器中我现在有2种方法:
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])
...
如果必须使用不那么直接的init逻辑来处理许多不同的对象,那么对最佳实践的任何补充都是受欢迎的。