我有三张桌子通过多对多协会:超市,产品和供应。
每家超市可以存放许多产品,每个产品可以在许多超市出售。关联是通过供应模型建立的。
超级市场:
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表创建关联。
如果我想从那里选择相应的超市,那么产品的表单和/或控制器中的代码应该是什么样的?
最佳答案
在您的产品表单中,您需要添加这一行…
<%= collection_select(:product, :supermarket_ids, SuperMarket.all, :id, :name, {}, { :multiple => true } )%>
您也不需要为此使用accepts_嵌套的_属性,您已经设置的多对多关联应该负责其余的事务。