嵌套has_many关系的范围

时间:2014-06-17 23:46:00

标签: ruby-on-rails scope has-many belongs-to

我在Rails中的两个对象之间有一个has_many关系,比方说ABC

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的所有对象,其具有属于特定cB的特定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?这是最好的方式吗?

1 个答案:

答案 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)))
}