我有一些模型,它是自引用的。它包含somethings
,可以是child
或parent
,或两者都有。
可以做这样的事情吗?
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
的每个child
的parent
。提前致谢!
附言我完全需要
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
而我得到的正是我想要的!