休斯顿,我们遇到了一个问题:
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的参数......?我完全迷失在这里......
答案 0 :(得分:1)
在全新安装的Rails5应用程序中,belongs_to
默认隐含optional: false
(以前称为required: true
)。
您需要创建MergedModel
FirstModel
和SecondModel
关联...
看起来您正在尝试仅在关联MergedModel
的情况下创建FirstModel
,如果SecondModel
是可选的,您需要对belongs_to
说明...
belongs_to :second_model, optional: true
答案 1 :(得分:1)
您的表单应该fields_for :merged_models
而不仅仅是merged_model
。