Rails5,嵌套形式的未经许可的参数,同时关联现有对象

时间:2017-03-16 13:13:17

标签: ruby-on-rails-5 nested-forms strong-parameters fields-for

为什么为什么......?

三个模型( FirstModel SecondModel JoinedModel ),JoinedModel属于其他两个componentResized()彼此,通过 JoinedModel 。 JoinedModel has_many first_model和second_model。

它还会验证accepts_nested_attributes_forfirst_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 ...

1 个答案:

答案 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记录,只有选择其他两个(现有的)记录和关联只是让我抓住那些方法......有点蹩脚,但是很好......