2012-01-24 120 views
1

比方說,你有Question模型以下has_many協會:(從this插件所採取的示例)如何查找has_many關聯數爲零的所有記錄?

has_many :comment_threads, 
     :class_name => "Comment", 
     :as   => :commentable, 
     :dependent => :destroy 

我將如何定義範圍或返回沒有相關評論問題一個類的方法?

基本上我想Question.unanswered返回零評論的所有問題。

+0

P.s現在使用counter_cache,但它很好奇如何用select/count語句來做到這一點。 –

回答

3

我覺得跟counter_cache做法是更好和更快,但您可以創建你想要這樣的(如果我猜的表或列名稱錯誤,你可能需要一些調整)範圍:

scope :unanswered, 
    joins('LEFT OUTER JOIN comments ON comments.commentable_id = questions.id'). 
    where('comments.id IS NULL') 

使用LEFT OUTER JOIN產生加入表格,對於未註釋的問題,評論表的所有列都設置爲NULL。這些正是我們需要的行,所以我們使用where進行過濾。

相關問題