Rails ActiveRecord - 选择评论最多的用户

Pas*_*zyk 1 ruby mysql sqlite activerecord ruby-on-rails

我想选择评论最高的用户.

评论是有关系的.

我可以通过以下方式查询:

User.first.comments
Run Code Online (Sandbox Code Playgroud)

现在我想选择评论最多的用户.

我不想遍历整个用户表,因为这非常耗时.

也许是这样的:

User.joins(:comments).find(:all, :order => "COUNT(comments) desc")
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

如果无法解决,我会将它们缓存在外部表中.

Mau*_*res 8

你应该使用一个计数器缓存,这是一个例子:

class User < ActiveRecord::Base
  has_many :comments
end

class Comment < ActiveRecord::Base
  belongs_to :user, :counter_cache => true
end
Run Code Online (Sandbox Code Playgroud)

然后,您必须将comments_count列添加到users表,并且每当向用户创建新注释时,此字段将自动递增.最后,您的查询可能是这样的:

User.order( "comments_count desc" ).limit(10).all
Run Code Online (Sandbox Code Playgroud)