我有一些模型,它是自引用的。它包含somethings,可以是childparent,或两者都有。
可以做这样的事情吗?

class Class < ActiveRecord::Base
    belongs_to :parent, class_name: 'Class', foreign_key: :parent_id
    has_many :children, class_name: 'Class', foreign_key: :parent_id
    has_many :somethings, foreign_key: :something_id
    has_many :somethings, through: :children, foreign_key: :something_id
end


我想做的是调用parent.somethings之类的东西,并获取它们的完整列表。
现在,我得到的只是stack level too deep错误。
没有最后一行(has_many :somethings, through: :children, foreign_key: :something_id),我只能得到child.somethings,并且效果很好。

所以基本上我想获取somethings的列表,其中包括特定somethings的每个childparent

提前致谢!

附言我完全需要ActiveRecord::Associations::CollectionProxy,所以我认为不可能创建收集somethings的方法。

P.P.S.抱歉,如果我的英语不太好:p

最佳答案

在对Active Record Query Interface进行了大约一个小时的研究之后,实际上我已经找到了答案。
这很简单,所以我做到了:

class SomeClass < ActiveRecord::Base
    belongs_to :parent, class_name: 'Class', foreign_key: :parent_id
    has_many :children, class_name: 'Class', foreign_key: :parent_id
    has_many :somethings

    def all_somethings(order)
      Something.joins(some_class: :parent).where("some_class_id = :id OR parents_some_classes.id = :id", {id: self.id}).uniq.order(order)
    end
end


而我得到的正是我想要的!

10-08 13:23