为什么为什么为什么……?
三种模式(FirstModel,SecondModel,JoinedModel),JoinedModel属于他人和其他两人双双has_many
对方,通过JoinedModel。JoinedModel accepts_nested_attributes_for
first_model 和second_model 。
它还验证first_model_id
和 的存在second_model_id
。
加入模型强参数:
private
def joined_params
params.require(:joined_model).permit(:first_model_id, :second_model_id,
:first_models_attributes => [:id, :name],
:second_models_attributes => [:id, :full_name])
end
JoinedModel 的 _form:
<%= form_for(joined_model) do |f| %>
<%= f.fields_for :second_models do |ff| %>
<%= ff.select(SecondModel.all.map {|c| [ c.full_name, c.id ] }, { include_blank: true }) -%>
(与f.fields_for
FirstModel相同)
当我提交此表格时,我得到
不允许的参数 first_models, second_models
并查询:
参数:{"utf8"=>"✓", "authenticity_token"=>"gvW/OrOXJruAK0ZD+uoajJ4N+dZvpmZF8Ay0TOKF9HPO19d4tRBoWz0C4VoaOABYat8KzrryL8lp5ax+Y9ZJR"="model="{model_first"="model="{model_first"="model_first "}, "second_models"=>{"second_model_id"=>"1"}}, "commit"=>"创建连接模型"}
我不知道为什么,等表单尝试发送哈希 -"second_models"=>{"second_model_id"=>"1"}
它应该"second_model_id"=>"1"
就像这样,如果我的表单使用 simplef.number_field :first_model_id
而不是select
......
我找到了答案并将离开这篇文章,因为在 StackOverflow 上发现了许多类似的未回答的问题
因此,答案是使用 parent 的字段构建器 for select
,例如:
<%= form_for(joined_model) do |f| %>
<%= f.fields_for :second_models do |ff| %>
<%= f.select(SecondModel.all.map {|c| [ c.full_name, c.id ] }, { include_blank: true }) -%>
看起来现在一切正常,但如果有人知道为什么我什至需要|ff|
为嵌套字段提供构建器对象(在我的情况下),如果我什至不使用它,我将给你一个嗨五和一个探戈舞!
更新:
所以我发现在这种情况下我什至不需要fields_for
......现在这一切都有意义,因为在这里我正在创建一个新的 JoinedModel 的记录并且只选择其他两个(现有的)记录和关联只是让我抓住这些方法..有点la脚,但是哦...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句