Ruby on rails rails4集合选择具有多个关联和嵌套模型表单

Ruby on rails rails4集合选择具有多个关联和嵌套模型表单,ruby-on-rails,forms,activerecord,nested-attributes,collection-select,Ruby On Rails,Forms,Activerecord,Nested Attributes,Collection Select,我有一个rails4应用程序。目前,如果我只选择一个选项,则我的收藏选择仅起作用。下面是我的工作代码。我只有产品形式。行业模型填充了种子.rb。IndustryProduct仅用于连接其他两个型号 我想知道我必须在代码中修改什么才能选择更多 我看到了一些使用multiple:true选项的工作示例,如(10:20),但在这种情况下,UI有点难看+无法使用任何示例代码。是否有其他解决方案,比如选择一个选项的多个框而不是一个多个选项的框 型号: class Product < ActiveRe

我有一个rails4应用程序。目前,如果我只选择一个选项,则我的收藏选择仅起作用。下面是我的工作代码。我只有产品形式。行业模型填充了
种子.rb
。IndustryProduct仅用于连接其他两个型号

我想知道我必须在代码中修改什么才能选择更多

我看到了一些使用
multiple:true
选项的工作示例,如(10:20),但在这种情况下,UI有点难看+无法使用任何示例代码。是否有其他解决方案,比如选择一个选项的多个框而不是一个多个选项的框

型号:

class Product < ActiveRecord::Base
  belongs_to :user
  has_many :industry_products
  has_many :industries, through: :industry_products
  has_many :product_features

  accepts_nested_attributes_for :industry_products, allow_destroy: true
  accepts_nested_attributes_for :product_features

  validates_associated :industry_products
  validates_associated :product_features
end

class Industry < ActiveRecord::Base
  has_many :industry_products
  has_many :products, through: :industry_products

  accepts_nested_attributes_for :industry_products
end

class IndustryProduct < ActiveRecord::Base
  belongs_to :product
  belongs_to :industry
end

首先,您可以通过使用它设置
@产品的
行业ID
来修复您的第一个集合选择:

<%= form_for @product do |f| %>
  <%= f.collection_select :industry_ids, Industry.all, :id, :name %>
<% end %>
比使用嵌套属性简洁得多


要获得“多个”选择,您需要使用以下选项:

<%= f.collection_select :industry_ids, Industry.all, :id, :name, {}, { multiple: true } %>

Rich,我试过这个(我想你的产品参数代码应该是
(……{industry\u id:[]))
,但由于某些原因,如果我使用command+click,我只能选择更多的行业,而
product.industries
将不会被保存:
product.industries=>
product.industries.first=>nil
请求的控制台日志是什么?
行业ID
不应该在卷曲的括号中,如果我这样做:
 ..,行业产品属性:[:id,行业id:[],:\u destroy]
然后我得到
语法错误,意外']',预期=>…d,行业id:[],:\u destroy],行业属性:[:id…
,但是如果我使用{}然后我得到了
Unpermitted参数:industry\u id
noooooo,这是对
industry\u产品的嵌套属性的替换(
:)
<%= form_for @product do |f| %>
  <%= f.collection_select :industry_ids, Industry.all, :id, :name %>
<% end %>
#app/controllers/products_controller.rb
....
def product_params
  params.require(:product).permit(.... industry_ids: [])
end
<%= f.collection_select :industry_ids, Industry.all, :id, :name, {}, { multiple: true } %>
<%= f.collection_check_boxes :industry_ids, Industry.all, :id, :name %>