2011-09-07 103 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

父母可能會有一個孩子,這是一個不喜歡的,還有一個最喜歡的壽。 –

相關問題