2012-04-02 52 views
1

我想選擇評論最高的用戶。Rails ActiveRecord - 用大多數評論選擇用戶

評論是關係。

我可以查詢他們通過:

User.first.comments 

現在我想選擇具有最多評論的用戶。

我不想遍歷整個用戶表,因爲這非常耗時。

也許是這樣的:

User.joins(:comments).find(:all, :order => "COUNT(comments) desc") 

但是,這是行不通的。

如果沒有解決方案是可能的,我會將它們緩存在外部表中。

回答

8

您應該使用一個計數器緩存,這裏有一個例子:

class User < ActiveRecord::Base 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :user, :counter_cache => true 
end 

然後,你必須在comments_count列添加到用戶表,每當一個新的評論與用戶創建的這個字段自動增加。最後,您的查詢可能是這樣的:

User.order("comments_count desc").limit(10).all