使用嵌套属性在rails中的多对多关系的下拉菜单

时间:2012-09-13 12:44:10

标签: ruby-on-rails ruby many-to-many nested-attributes has-many-through

我通过多对多关联有三个表:超市,产品和供应。 每个超市都可以容纳许多产品,每个产品都可以在许多超市销售。该关联是通过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创建关联。 如果我想从那里选择相应的超市,那么代码在产品的形式和/或控制器中应该是什么样的?

2 个答案:

答案 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_idssuper_market_ids[],语法只是验证了一次。

在select标签中,如果你想要复选框类型多选,那么有一个chosen库可以帮助你构建更好的UI,