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

Rails5, nested form, undefined param

休斯顿,我们有问题:

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 %>

问题:

Processing by FirstModelsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"f+D8AaVzM6ahrUyo/nwxISFEleVrXGxo8m30sIiLIe7gvG8J9KfONjuT09j6z3M4Rvw+n3Hm6PMddOtfbgjt5g==", "first_model"=>{"first_name"=>"yyyy", "last_name"=>"yyy", "merged_model"=>{"start_date(1i)"=>"2017", "start_date(2i)"=>"2", "start_date(3i)"=>"28", "second_model_id"=>"1"}}, "commit"=>"Create"} Unpermitted parameter: merged_model Unpermitted parameter: 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| %>

但是得到了:

no implicit conversion of MergedModel into Integer

没完全明白什么意思..

还尝试从 FirstModel 的创建操作创建一个新的 MergedModel,并发出一声巨响:

@merge_model = MergedModel.create!

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

有人可以解释一下吗?我觉得将我的 MergedModel 参数数组传递给 MergedModel 参数...?我完全迷失在这里......

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

您需要创建一个 MergedModel 并与 FirstModelSecondModel 关联...

看起来您正在尝试创建一个仅与 FirstModel 相关联的 MergedModel,如果 SecondModel 是可选的,则您需要说明与 belongs_to 相关联。 ..

belongs_to :second_model, optional: true

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