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 } %>
有没有办法与选择下拉框,而不是要做到这一点:
编辑
在我的表现形态,它的工作原理?
未定义的方法'product_ids [] '代表#<公司:0x00000104c687c0>。第一个参数需要是一个关系 –
@Christian Fazzini,我已经更新了答案。 – Hck
修正了您的新建议的一些错别字,否则会引发一些错误。其次,您的建议会传递'products_attributes',这意味着更多用于更新,而不是创建 –