Activerecord:按祖父母值查找记录

Activerecord: find record by grandparent value

我有以下型号:

class GrandParent < ActiveRecord::Base
  has_many :parents
  has_many :children, through: :parents
end

class Parent < ActiveRecord::Base
  has_many :children
  belongs_to :grand_parent
end

class Child < ActiveRecord::Base
  belongs_to :parent
end

我想找到所有 Children,其中 child 的 grand_parent 的值等于 TRUE,但我无法正确使用语法。类似于:

Child.where(grand_parent.value: TRUE)

您需要加入模型 in-between 才能引用 GrandParent,因此您必须先加入 Parent,然后再过滤。

Child.joins(parent: [:grand_parent]).where('grand_parents.value is TRUE')

只是为了验证一下,值是 grand_parents table 上的实际列还是您只想获取所有与 grand_parents 关联的 children

如果是...

Child.joins(parent: [:grand_parent]) 应该有效

如果你想获得所有 children 而没有关联 grand_parent objects 你可以

Child.joins(:parent).where('not exists(select 1 from grand_parents where grand_parents.id = parents.grand_parent_id')

如果中间有一个连接 table 就像 grand_parent_parents table

会略有不同

Child.joins(:parent).where('not exists(select 1 from grand_parent_parents where grand_parent_parents.parent_id = parent.id')