选择所有用户,按他们的评论计数进行排序

时间:2010-12-13 10:23:01

标签: sql ruby-on-rails ruby ruby-on-rails-3

在Rails应用程序中,我想获取按评论次数排序的所有用户,以获得前十名评论者。具体来说,我该怎么做?

在我的模型中,User和Comment彼此处于HABTM关系。

现在我有:

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

我仍然坚持这样一个事实:它为一个用户提供了多个条目,因为一个用户可能有多个评论。我仍然需要获得前十位用户。

执行此操作的更有效方法,例如在查询本身?

由于

2 个答案:

答案 0 :(得分:3)

如果评论模型中的belongs_to :user配置如下:

belongs_to :user, :counter_cache => true

然后你的comments_count表中有一个users整数字段默认为0,那么你就可以按顺序排序而不必进行连接。

答案 1 :(得分:1)

你总能做到

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

如果它没有达到您的数据库性能