2011-07-05 128 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 } %> 

有沒有辦法與選擇下拉框,而不是要做到這一點:

編輯

在我的表現形態,它的工作原理?

回答

0

使用產品嵌套形式:

<%= fields_for @ company.products做| product_fields | %> <%= product_fields.collection_select:PRODUCT_ID,Product.all,:ID,:姓名,{:提示=> '選擇產品'}%> <%端%>

+0

未定義的方法'product_ids [] '代表#<公司:0x00000104c687c0>。第一個參數需要是一個關係 –

+0

@Christian Fazzini,我已經更新了答案。 – Hck

+0

修正了您的新建議的一些錯別字,否則會引發一些錯誤。其次,您的建議會傳遞'products_attributes',這意味着更多用於更新,而不是創建 –

相關問題