2013-10-24 156 views
0

我有一个叫做Groups的模型,它是自引用的,里面有团体 - 父母和孩子在一起,通过parent_id连接。因此,我可以让一个团体的孩子和产品连接到一个团体,但是我怎样才能通过其子女获得所有父母团体的产品? 这里是我的模型:获取儿童类别的产品

class Group < ActiveRecord::Base 
    belongs_to :parent, class_name: 'Group', foreign_key: :parent_id 
    has_many :children, class_name: 'Group', foreign_key: :parent_id 
    has_many :products 

    validates :id, uniqueness: true 

    self.primary_key = :id 
end 

这将是巨大的,如果,例如,我可以打电话给group.products,让所有的产品,这是该组的直接后裔和儿童组的所有产品。 如果我可以用Kaminari(或另一个分页程序)来分类它们会更好。

P.S.我试图插入一些像has_many :products, through: :children,但我得到的是Stack level is too deep ...

P.P.S.我可以创建方法,将收集的Hash所有的产品,但我将无法按标题排序的产品的清单,价格等

+0

对于哪种方法未定义的方法?请发布几行例外 – usha

+0

好吧,我添加了控制台输出,当我尝试调用'group.child_products'时,我得到了。 “产品”和“组”之间是否需要额外的模型? – Dezl

+0

@Vimsha好的,谢谢你的帮助。我以某种方式解决了问题的根源。但是现在,当我打电话给group.child_products时,我只能得到父母孩子后代的产品。如何包含父母自己的产品呢? – Dezl

回答

0

试试这个

class Group < ActiveRecord::Base 
    belongs_to :parent, class_name: 'Group', foreign_key: :parent_id 
    has_many :children, class_name: 'Group', foreign_key: :parent_id 
    has_many :products 

    has_many :child_products, :through => :children, :source => :products 

    validates :id, uniqueness: true 

    self.primary_key = :id 
end 
+0

感谢您的回复,但我该如何实施?我对Ruby很有新意。我试着打电话给group.child_products,但是得到了“undefined method” Dezl

+0

你确定吗?我在轨道控制台中试过了,它似乎工作得很好。 – usha