2010-12-13 108 views
1

在一個Rails應用程序中,我想要取得所有用戶,按他們的評論數排序,以獲得前十名評論者。我該怎麼做,具體如何?選擇所有用戶,按照他們的評論排序

在我的模型中,用戶和評論之間存在HABTM關係。

現在我有:

all_users = User.all :joins => :comments 
    all_users.sort_by do |user| 
    user.comments.count 
    end 

我還是堅持了事實,這提供了多個條目爲一個用戶,因爲一個用戶可能有多個評論。而且我仍然只能得到前十名用戶。

什麼是更有效的方法來做到這一點,例如,在查詢本身?

感謝

回答

1

你總是可以做

User.all(:joins => :comments, :group => 'users.id', :order => 'count(*)') 

,如果它不打你的數據庫性能

+0

謝謝,那正是我需要的! – slhck 2010-12-13 10:58:17

3

如果你有在配置這樣的評價模型的belongs_to :user

belongs_to :user, :counter_cache => true 

然後你有一個comments_count整型字段在users表默認爲0,那麼你就可以以此命令而不是必須加入。

+0

謝謝,瑞安。在我的特定設置中,「User」和「Comment」處於HABTM關係中,那麼我該怎麼做? – slhck 2010-12-13 10:32:40