我通过多对多关联有三个表:超市,产品和供应。 每个超市都可以容纳许多产品,每个产品都可以在许多超市销售。该关联是通过Supply-model构建的。
超市:
class Supermarket < ActiveRecord::Base
attr_accessible :name, :address, :products_attributes
has_many :supplies
has_many :products, :through => :supplies
accepts_nested_attributes_for :products
end
产品:
class Product < ActiveRecord::Base
attr_accessible :name, :supermarkets_attributes
has_many :supplies
has_many :supermarkets, :through => :supplies
accepts_nested_attributes_for :supermarkets
end
通过供应协会:
class Supply < ActiveRecord::Base
attr_accessible :supermarket_id, :product_id
belongs_to :supermarket
belongs_to :product
end
我创建了脚手架并填充了超市桌。 在我的产品表单中,我想使用一个(或多个)下拉菜单来选择相应的超市名称。目标是创建一个新产品,同时通过Supply-table创建关联。 如果我想从那里选择相应的超市,那么代码在产品的形式和/或控制器中应该是什么样的?
答案 0 :(得分:4)
在您的产品表单中,您需要添加此行...
<%= collection_select(:product, :supermarket_ids, SuperMarket.all, :id, :name, {}, { :multiple => true } )%>
您也不需要使用accepts_nested_attributes,您已经设置的多对多关联应该处理其余的事情。
答案 1 :(得分:0)
我认为在观点中
<%= f.collection_select "super_market_ids[]",@super_markets,:id,:name,{},{:multiple=>"multiple'} %>
我不确定super_market_ids
或super_market_ids[]
,语法只是验证了一次。
在select标签中,如果你想要复选框类型多选,那么有一个chosen库可以帮助你构建更好的UI,