【问题标题】:Select all Users, order them by their comments count选择所有用户,按评论数排序
【发布时间】:2010-12-13 10:23:01
【问题描述】:

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

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

现在我有:

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

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

什么是更有效的方法,例如在查询本身中?

谢谢

【问题讨论】:

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


    【解决方案1】:

    如果您在 Comment 模型中的 belongs_to :user 配置如下:

    belongs_to :user, :counter_cache => true
    

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

    【讨论】:

    • 谢谢你,瑞恩。在我的特定设置中,UserComment 彼此处于 HABTM 关系中,那我该怎么办?
    【解决方案2】:

    你总是可以的

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

    如果它没有影响您的数据库性能

    【讨论】:

    • 谢谢,这正是我所需要的!
    猜你喜欢
    • 2011-05-03
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    相关资源
    最近更新 更多