2

我通过多对多关联有三个表:超市、产品和供应。每个超市可以容纳许多产品,每种产品都可以在许多超市销售。该关联是通过供应模型建立的。

超级市场:

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

我已经创建了脚手架并填充了超市表。在我的产品表单中,我想使用一个(或多个)下拉菜单来选择对应的超市名称。目标是创建一个新产品,同时通过供应表创建关联。如果我想从那里选择相应的超市,代码在产品的表单和/或控制器中应该是什么样的?

4

2 回答 2

4

在您的产品表单中,您需要添加此行...

<%= collection_select(:product, :supermarket_ids, SuperMarket.all, :id, :name, {}, { :multiple => true } )%>

您也不应该为此使用accepts_nested_attributes,您已经建立的多对多关联应该负责其余的。

于 2012-09-13T17:54:30.640 回答
0

我认为在意见

<%= f.collection_select "super_market_ids[]",@super_markets,:id,:name,{},{:multiple=>"multiple'} %>

我不确定super_market_idsorsuper_market_ids[]和语法刚刚验证过一次。

在选择标签中,如果您想要复选框类型的多选,则有一个选定的库可以帮助您构建更好的 UI,

于 2012-09-13T12:52:18.257 回答