2010-12-13 56 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

相关问题