我在Rails中的两个对象之间有一个has_many
关系,比方说A
,B
和C
class A < ActiveRecord::Base
has_many :b
end
class B < ActiveRecord::Base
belongs_to :a
has_many :c
end
class C < ActiveRecord::Base
belongs_to :b
has_many :d
end
class D < ActiveRecord::Base
belongs_to :c
end
我希望获得类D
的所有对象,其具有属于特定c
和B
的特定A
。我可以制作以下scope
s
scope :by_c, ->(cc) { where(:c_id => cc) }
scope :by_b, lambda { |bb|
joins(:c).where('c.b_id = ?', bb)
}
我该如何做scope :by_a
?这是最好的方式吗?
答案 0 :(得分:2)
scope :by_a ->(aa) {
joins(:c).where(c_id: C.joins(:b).where(b_id: B.joins(:a).where(a_id: aa.id)))
}