为什么has_and_belongs_to_many添加了类方法而不是实例方法?

时间:2013-06-10 03:02:29

标签: ruby-on-rails ruby ruby-on-rails-3

我有几个型号

class Product < ActiveRecord::Base
  has_and_belongs_to_many :categories
end

class Category < ActiveRecord::Base
  has_and_belongs_to_many :products
end

现在为什么我不能说

prod = Product.new
prod.categories << Category.new

为什么has_and_belongs_to_many在添加实例方法的同时添加类Product#categories<<等类方法?

如何使用这些类方法来设置关联?

2 个答案:

答案 0 :(得分:2)

有了你给我的错误和代码,那就是你可能错过的东西:

prod = Product.new              # This is a Product instance
prod.categories << Category.new # This works

prod = Product.where(name:'x')  # This returns a query (ActiveRecord::Relation) 
prod.categories << Category.new # This doesn't work

prod = Product.where(name:'x').first  # This is a Product instance
prod.categories << Category.new       # This works

答案 1 :(得分:0)

创建新对象时(假设为Product),您可以使用.build方法填写这些关联并调用save!

编辑:这是一个很好的read