2011-09-07 76 views

回答

2

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

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

+0

如何在我的控制器中使用该范围? –

+0

我已经想通了 –

+0

,但现在它会出现这种滥用聚合:COUNT()' –

0

你应该可以用一个简单的连接使用ActiveRecord来实现:

Parent.where(:children => {:favourite => true}).joins(:children) 
+0

我想找回没有最喜欢的孩子的父母。 –

0
Parent.joins(:children).where(children:{favorite:true}) 

注意我使用的1.9哈希语法,我认为看起来更清洁一些。

+0

父母可能会有一个孩子,这是一个不喜欢的,还有一个最喜欢的寿。 –

相关问题