Drop-Down-Menu for Many-to-Many relation in rails

2019-02-11 03:19发布

I have three tables via many-to-many-association: Supermarket, Product and Supply. Each Supermarket can hold many products and each product can be sold in many supermarkets. The association is build via the Supply-model.

Supermarket:

class Supermarket < ActiveRecord::Base
  attr_accessible :name, :address, :products_attributes

  has_many :supplies
  has_many :products, :through => :supplies

  accepts_nested_attributes_for :products
end

Product:

class Product < ActiveRecord::Base
  attr_accessible :name, :supermarkets_attributes

  has_many :supplies
  has_many :supermarkets, :through => :supplies
  accepts_nested_attributes_for :supermarkets
end

Association via Supply:

class Supply < ActiveRecord::Base
  attr_accessible :supermarket_id, :product_id

  belongs_to :supermarket
  belongs_to :product
end

I have created the scaffolds and populated the Supermarket-table. In my Product form, i want to use one (or more) drop-down-menu(s) to select the correspondent Supermarket-name(s). Goal is to create a new product while also creating the association via the Supply-table. What should the code look like in form and/or controller for the products if I want to select the corresponding supermarkets from there?

2条回答
贪生不怕死
2楼-- · 2019-02-11 04:16

I think in views

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

I am not sure about super_market_ids or super_market_ids[] and syntax just verified once.

In select tag if you want checkbox type multi select there is an chosen library that will help you to build nicer UI,

查看更多
疯言疯语
3楼-- · 2019-02-11 04:17

In you products form you need to add this line...

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

You also shouldn't need to use an accepts_nested_attributes for this, the many to many association you already have set up should take care of the rest.

查看更多
登录 后发表回答