Rails5,嵌套形式,未定义的参数

时间:2017-02-28 16:22:29

标签: ruby-on-rails nested-forms nested-attributes accepts-nested-attributes

休斯顿,我们遇到了一个问题:

class FirstModel 
 has_many :merged_models
 has_many :second_models, :through => :merged_models
end

class SecondModel 
 has_many :merged_models
 has_many :first_models, :through => :merged_models
end

class MergedModel 
 belongs_to :first_model
 belongs_to :second_model
end

形式:

<%= form_for(first_model) do |f| %>
 <%= f.fields_for :merged_model do |ff| %>
    <%= ff.label :date %>
    <%= ff.date_select :start_date %>

问题:

  

FirstModelsController处理#create as HTML参数:   {&#34; UTF8&#34; = GT;&#34;✓&#34 ;,   &#34; authenticity_token&#34; = GT;&#34; F + D8AaVzM6ahrUyo / nwxISFEleVrXGxo8m30sIiLIe7gvG8J9KfONjuT09j6z3M4Rvw + n3Hm6PMddOtfbgjt5g ==&#34 ;,   &#34; first_model&#34; =&gt; {&#34; first_name&#34; =&gt;&#34; yyyy&#34;,&#34; last_name&#34; =&gt;&#34; yyy&#34 ;,   &#34; merged_model&#34; =&gt; {&#34; start_date(1i)&#34; =&gt;&#34; 2017&#34;,&#34; start_date(2i)&#34; =&gt; ;&#34; 2&#34 ;,   &#34; start_date(3i)&#34; =&gt;&#34; 28&#34;,&#34; second_model_id&#34; =&gt;&#34; 1&#34;}},&#34;提交&#34; = GT;&#34;创建&#34;}   未允许的参数:merged_model未许可的参数:   merged_model

第一个模特的控制者强大的参数:

  params.require(:first_model).permit(:first_name, :last_name, merged_models_attributes: [:id, :start_date])

第一个模型接受合并模型的嵌套属性:

  accepts_nested_attributes_for :merged_models

但是,在创建FirstModel之后,不会创建MergedModel。试图以形式创建它:

  <%= f.fields_for :merged_model [first_model.merged_models.build] do |ff| %>

但得到了:

  

没有将MergedModel隐式转换为Integer

不完全明白这意味着什么......

还尝试从FirstModel的创建操作中创建一个新的MergedModel,其中包括:bang:

@merge_model = MergedModel.create!

得到了同样的错误 - 没有隐式转换...

有人能解释一下这个吗?我觉得将MergedModel的一系列参数传递给MergedModel的参数......?我完全迷失在这里......

2 个答案:

答案 0 :(得分:1)

在全新安装的Rails5应用程序中,belongs_to默认隐含optional: false(以前称为required: true)。

您需要创建MergedModel FirstModelSecondModel关联...

看起来您正在尝试仅在关联MergedModel的情况下创建FirstModel,如果SecondModel是可选的,您需要对belongs_to说明...

belongs_to :second_model, optional: true

答案 1 :(得分:1)

您的表单应该fields_for :merged_models而不仅仅是merged_model