【问题标题】:Rails5, unpermitted params in nested form, while associating existing objectsRails5,嵌套形式的未经允许的参数,同时关联现有对象
【发布时间】:2017-03-16 13:13:17
【问题描述】:

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

三个模型(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 }) -%>

(和 FirstModel 相同的 f.fields_for)

当我提交这个表单时,我得到了

不允许的参数 first_models, second_models

并查询:

参数:{"utf8"=>"✓", "authenticity_token"=>"gvW/OrOXJruAK0ZD+uoajJ4N+dZvpmZF8Ay0TOKF9HPO19d4tRBoWz0C4VoaABYat8KzrryL8lp5ax+Y9ZJRg==", "joined_model"=>{"first_models"=>{"first_model_id"=>"1"}, "second_models"=>{"second_model_id"=>"1"}}, "commit"=>"创建加入 型号”}

我不知道为什么,如何等表单尝试发送哈希 - "second_models"=&gt;{"second_model_id"=&gt;"1"} 它应该就像 "second_model_id"=&gt;"1" 一样,如果我的表单使用简单的 f.number_field :first_model_id 而不是 select,它会这样做。 .

【问题讨论】:

  • 你应该在你的答案中添加一个答案,然后接受它。感觉很奇怪,但绝对可以接受(并鼓励)!另外,也许考虑一个更清晰的标题?当其他人遇到此问题时,我们如何帮助他们找到解决方案?
  • 是的,好主意,我会发布的。关于标题,我觉得这样更好——很多相关的关键词(想不出其他关键词了:))))
  • 您的标题应该是简洁、相关的问题或问题陈述。搜索在没有关键字加载的情况下运行良好。 ;)
  • 嗯,也许是的,机器变得更智能的时候到了……我会修复它:) thx

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


【解决方案1】:

我找到了答案并将离开这篇文章,因为在 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|),如果我什至不使用它,我会给出一个嗨五和一个探戈舞!

更新:

所以我发现在这种情况下我什至不需要fields_for...现在这一切都说得通了,因为我在这里创建了一个新的 JoinedModel 记录并且只选择另外两个(现有的)记录和关联只是让我抓住那些方法......有点蹩脚,但哦,好吧......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多