查询父节点与具有特定属性的子节点的位置



假设我有一个Parent,它有_many:children

我想拉出所有没有一个孩子的父母的最爱设置为真。

没有终端,但你可以试试这个吗?:

class Parent < ActiveRecord::Base
  has_many :children
  scope :evil, select("parents.*, SUM(children.favourite) as fav_count").joins("LEFT JOIN children ON (children.parent_id = parents.id AND children.favourite = 1)").group("parents.id").having("fav_count = 0")
end

我想要一个更干净的语法,但我不确定有更好的方法(任何人)?让我知道,如果有任何SQL错误,但我认为会给你你需要的。

注意:要使用它,您只需将其链接到Parent.evil,或者您可以将其链接到关联foo.parents.evil

您应该能够通过使用ActiveRecord:

实现这一简单的连接:
Parent.where(:children => {:favourite => true}).joins(:children)
Parent.joins(:children).where(children:{favorite:true})

注意我使用的是1.9散列语法,我认为它看起来更干净。

最新更新