Rails - “无效的源反射”:has_many => :通过

时间:2011-03-01 04:14:38

标签: ruby-on-rails activerecord

我遇到了:has_many => :through关联的问题,该关联引用了另一个:has_many => :through关联。

我的rails应用程序中有一个User - > Cart - > CartItem - > Product模型设置。以下是模型关联:

class User < ActiveRecord::Base
  has_many :purchases,  :class_name => "Cart",
                        :dependent => :destroy,
                        :conditions => {:purchased => true}
  has_many :items,      :through => :purchases,
                        :readonly => true
  has_many :products,   :through => :purchases,
                        :readonly => true
end

class Cart < Activerecord::Base
  belongs_to :user
  has_many :items,    :class_name => "CartItem",
                      :dependent => :delete_all                 
  has_many :products, :through => :items
end

class CartItem < ActiveRecord::Base
  belongs_to :cart
  belongs_to :product
end

这个想法是购物车有很多cart_items,它们只是对现有产品的引用。将购物车标记为购买后,用户应该可以通过user.products直接访问产品。

无论如何......我无法弄清楚如何设置我的User模型以便可以建立关系。我一直收到以下错误:

Invalid source reflection macro :has_many :through for has_many :products,
:through => :purchases. Use :source to specify the source reflection.

我在假设它要我向:source assoc添加has_many :products属性。在用户模型中,但考虑到源关联名称相同(并且在我添加:source => :products时无效),这看起来很愚蠢。

有谁知道我怎么能让它发挥作用?我真的很感激任何建议!

很抱歉,如果之前已经问过这个问题,但我一直在搜索,但我找不到答案。提前谢谢。

1 个答案:

答案 0 :(得分:0)

Rails不允许您链接嵌套的has_many :through关联。

这里有一个类似的问题:Ruby-on-Rails: Multiple has_many :through possible?