我尝试学习我的2个新的简单模型产品和作者之间的has_and_belongs_to_many关系,其中产品可以有许多作者,作者可以拥有大量产品。
我写了这个:
class Author < ActiveRecord::Base
has_and_belongs_to_many :products
end
class Product < ActiveRecord::Base
has_and_belongs_to_many :authors
end
在产品的部分形式中,我有:
<p>Products</p>
<%= collection_select(:product, :author_ids, @authors, :id, :name, :prompt => " ", :multiple => true) %>
但是当我点击更新按钮时,我收到这条奇怪的消息,我无法自行解决:
ProductsController#update中的NoMethodError undefined方法`reject'代表“1”:String
Rails.root:/ home / stephane / www / HABTM
应用程序跟踪|框架跟踪|完整追踪
app / controllers / products_controller.rb:63:in block in update'
app/controllers/products_controller.rb:62:in
update'
请求
参数: { “UTF8”=&gt;“中AOE“”, “_method”=&gt; “中放”, “authenticity_token”=&gt; “中2GlTssOFjTVZ9BikrIFgx22cdTOIJuAB70liYhhLf + 4 =”, “product”=&gt; {“title”=&gt;“LetrésordesTempliers”, “ORIGINAL_TITLE”=&gt; “中”, “数量”=&gt; “中1”, “added_by”=&gt; “中”, “author_ids”=&gt; “中1”}, “commit”=&gt;“更新产品”, “ID”=&gt; “中1”}
怎么了?有没有问题:product_ids ...我在互联网上看到我不得不说“s”但是我不确定它代表什么......
如何将表authors_products链接到下拉菜单返回的键? (此处“author_ids”=&gt;“1”) 谢谢!
更多信息: 可以用这个信息解决,但仍然没有保存关系:
collection_select("sales_agent", "customer_id", @customers, "id", "name")
假设您的客户模型具有ID属性和名称属性,这将产生上述代码。因此,查看我们传递给collection_select调用的值:
所以我现在写了
<p>Products</p>
<%= collection_select(:author, :author_id, @authors, :id, :name, :prompt => " ", :multiple => true) %>
并且它有效,但暂时不保存链接...(仅保存正常字段的更新,而不是关系:-(
答案 0 :(得分:2)
对于HABTM关系,您是否有一个名为author_products
的单独模型?
您需要通过执行rails g model author_product
之类的操作来运行其他迁移,并且该表应该只包含两个字段:
belongs_to :author
belongs_to :product
确保没有主键。
类似的东西:
def self.up
create_table(:author_products), :id => false do |t|
t.references :author
t.references :product
end
end