我有三张桌子通过多对多协会:超市,产品和供应。
每家超市可以存放许多产品,每个产品可以在许多超市出售。关联是通过供应模型建立的。
超级市场:

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_嵌套的_属性,您已经设置的多对多关联应该负责其余的事务。

10-08 01:17