0

休斯顿,我们有一个问题:

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 参数处理:{"utf8"=>"✓", "authenticity_token"=>"f+D8AaVzM6ahrUyo/nwxISFEleVrXGxo8m30sIiLIe7gvG8J9KfONjuT09j6z3M4Rvw+n3Hm6PMddOtfbgjt5g==","first_model"=>{"first_name" , "last_name"=>"yyy", "merged_model"=>{"start_date(1i)"=>"2017", "start_date(2i)"=>"2", "start_date(3i)"=>"28 ", "second_model_id"=>"1"}}, "commit"=>"Create"} 不允许的参数: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,效果非常好:

@merge_model = MergedModel.create!

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

任何人都可以对此进行更多解释吗?我觉得将我的 MergedModel 的参数数组传递给 MergedModel 的参数...?我完全迷失在这里......

4

2 回答 2

1

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

您需要创建一个MergedModelFirstModelANDSecondModel关联的两者...

看起来你正在尝试创建一个MergedModel只有FirstModel关联的,如果SecondModel是可选的,你需要说 for belongs_towith ...

belongs_to :second_model, optional: true
于 2017-02-28T16:36:33.917 回答
1

你的表单应该有fields_for :merged_models而不是只有merged_model.

于 2017-02-28T19:49:06.497 回答