【问题标题】:Rails 5: How to pass collection_select values through strong_params in a fields_for?Rails 5:如何通过fields_for中的strong_params传递collection_select值?
【发布时间】:2017-06-12 12:56:56
【问题描述】:

我已经尝试了所有视频和文章,但仍然找不到解决方案来将 fields_for collection_select 值添加到 strong_params 中的白名单。我花了几天时间试图弄清楚这一点(并问了很多人)。如果有人能花时间提供帮助,我将不胜感激!

我在 List 和 Topic 之间建立了多对多关联,其中 List_Topic 充当连接模型。使用 form_for,我为 List 的实例 (@list) 创建了一个表单,然后为 fields_for :list_topics 创建了一个表单。在字段中,我创建了一个由 Topic.all 填充的 collection_select。

<br>
 <%= form_for(@list) do |f| %>
  <%= f.label :subject %>
  <%= f.text_field :subject %>
<br>
<br>

 <%= f.fields_for :list_topics do |ff| %>
  <%= ff.label "Choose a Topic:"  %><br>
  <%= ff.label :content %>
  <%= ff.text_field :content %>
  <%= ff.collection_select(:id, @all_topics, :id, :name, {}, {multiple: true}) %>
 <% end %>

 <%= f.submit %>
<% end %>

在我的列表控制器中,我有:

class ListsController < ApplicationController

  def new
    @list = List.new
    @all_topics = Topic.all
    @list.list_topics.build 
  end

  def create
    @list = List.new(list_params)
  end

private

  def list_params
    params.require(:list).permit(:subject, :list_topics_attributes =>    [:topic, :content, :topic_ids, :id, :ids])
  end  

end

fields_for 表单中的参数传递为:

list_topics_attributes"=>{"0"=>{"content"=>"Hey", "id"=>["", "2"]}}} 

虽然strong_params 被列入@list 白名单,并且我可以通过:list_topics_attributes 让我制作的custom_attribute writer 识别fields_for 中的:content 参数,但我无法将strong_params 中的:id 参数列入白名单无论我尝试什么或我关注的文章/视频,都通过 collection_select 传递。他们根本不会出现。

我这里也有 git repo。表格在lists/new下

https://github.com/jwolfe890/Top5/blob/master/app/views/lists/new.html.erb

非常感谢您提供任何见解!

【问题讨论】:

    标签: ruby-on-rails ruby forms ruby-on-rails-4 collection-select


    【解决方案1】:

    有人刚刚在这里,但他的 cmets 看起来像是被删除了。我只是想感谢他,因为他的解决方案奏效了:

    params.require(:list).permit(:subject, :list_topics_attributes => [ :content, id: []])
    

    本质上,由于 id 位于 list_topics_attributes 散列中的数组中,因此 :id 字段必须在 list_topics_attributes 散列中传递,并且 :id 字段也需要分配给它的数组。

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多