为什么为什么......?
三个模型( FirstModel , SecondModel , JoinedModel ),JoinedModel属于其他两个componentResized()
彼此,通过 JoinedModel 。
JoinedModel has_many
first_model和second_model。
它还会验证accepts_nested_attributes_for
和first_model_id
的存在。
加入模型强大的参数:
second_model_id
JoinedModel的_form:
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
(和FirstModel相同的<%= 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 }) -%>
)
当我提交此表单时,我会
Unpermitted params first_models,second_models
并查询:
参数:{“utf8”=&gt;“✓”, “authenticity_token”=&gt; “中GVW / OrOXJruAK0ZD + uoajJ4N + dZvpmZF8Ay0TOKF9HPO19d4tRBoWz0C4VoaOABYat8KzrryL8lp5ax + Y9ZJRg ==”, “joined_model”=&GT; { “first_models”=&GT; { “first_model_id”=&gt; “中1”}, “second_models”=&gt; {“second_model_id”=&gt;“1”}},“commit”=&gt;“创建加入 模型“}
我不知道为什么,如何等形式尝试发送哈希 - f.fields_for
它应该像"second_models"=>{"second_model_id"=>"1"}
一样,如果我的表单使用简单的"second_model_id"=>"1"
代替它f.number_field :first_model_id
...
答案 0 :(得分:0)
我找到答案并将留下这篇文章,因为StackOverflow上发现了许多类似的未解答的问题
所以,答案是使用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|
),如果我甚至不使用它,我将给出一个Hi Five还有探戈舞!
<强>更新强>
所以我发现在这种情况下我甚至不需要fields_for
......现在一切都有了,因为我在这里创建了一个新的JoinedModel记录,只有选择其他两个(现有的)记录和关联只是让我抓住那些方法......有点蹩脚,但是很好......