2011-07-05 6 views
1

私の会社のフォームでは、製品を直接追加したいと考えています。基本的に、会社は多くの製品を持つことができます。会社に商品を追加するには?

class Company < ActiveRecord::Base 
    has_many :company_products 
    has_many :products, :through => :company_products 

    accepts_nested_attributes_for :products, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true 
end 

マイフォーム:

<%= form_for(@company) do |f| %> 

    <ul> 

    <li class="clearfix"> 
     <%= f.label :company_name %> 
     <%= f.text_field :company_name %> 
    </li> 

    <li> 
     <%= f.collection_select :product_ids, Product.all, :id, :name, { :prompt => 'Select a product' } %> 
    </li> 

    <li> 
     <%= f.collection_select :product_ids, Product.all, :id, :name, { :prompt => 'Select a product' } %> 
    </li> 

    <li> 
     <%= f.collection_select :product_ids, Product.all, :id, :name, { :prompt => 'Select a product' } %> 
    </li> 
.... 

の上、正確に動作しません。最後にf.collection_selectで選択された製品のみが追加されるためです。

これは私が達成しようとしているものです。コンソールでは、私は:

company.update_attributes({"product_ids"=>["1", "2", "3"]}) 

id:1,2,3の製品を指定された会社に割り当てます。

これをRails 3で行う正しい方法は何ですか?

<%= f.collection_select :product_ids, Product.all, :id, :name, { :prompt => 'Select a product'},{ :multiple => true } %> 

代わりに選択ドロップダウンボックスでこれを行う方法があります:

EDITは私のフォームで

、それはで動作しますか?製品の

答えて

0

使用ネストされたフォーム:

<% = fields_for @ company.products DO | product_fields | %> <% = product_fields.collection_select:PRODUCT_ID、Product.all、:ID:名前、{:プロンプト=> '製品を選択'}%> <%端%>

+0

未定義のメソッド 'product_idsを[] 'for#となります。最初の引数は、 –

+0

@Christian Fazziniの関係にする必要があります。私は答えを更新しました。 – Hck

+0

新しい提案にいくつかのタイプミスが修正されました。第2に、あなたの提案は、 –

関連する問題