Ruby on rails rails4集合选择具有多个关联和嵌套模型表单
我有一个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
种子.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 %>