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逻辑是受欢迎的。