gpt4 book ai didi

ruby-on-rails - has_many 通过自己的 child

转载 作者:行者123 更新时间:2023-12-04 06:05:54 25 4
gpt4 key购买 nike

我有一些模型,它是 self 参照的。它包含 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 的列表,其中包括特定 parent 的每个 childsomethings .

提前致谢!

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

附言对不起,如果我的英语不太好: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

我得到了我想要的!

关于ruby-on-rails - has_many 通过自己的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19452098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com