Rails ActiveRecord - Выберите пользователя с наибольшим количеством комментариев - PullRequest
1 голос
/ 02 апреля 2012

Я хотел выбрать пользователя с самыми высокими комментариями.

Комментарии в отношении.

Я могу запросить их через:

User.first.comments

Теперь я хотел выбрать пользователя с наибольшим количеством комментариев.

Я не хочу перебирать всю таблицу пользователей, потому что это занимает много времени.

Может быть, что-то вроде этого:

User.joins(:comments).find(:all, :order => "COUNT(comments) desc")

Но это не работает.

Если решение невозможно, я буду кешировать их во внешней таблице.

1 Ответ

8 голосов
/ 02 апреля 2012

Для этого вы должны использовать кеш счетчика, вот пример:

class User < ActiveRecord::Base
  has_many :comments
end

class Comment < ActiveRecord::Base
  belongs_to :user, :counter_cache => true
end

Затем необходимо добавить столбец comments_count в таблицу users , и каждый раз, когда создается новый комментарий с пользователем, это поле увеличивается автоматически. В конце ваш запрос может выглядеть так:

User.order( "comments_count desc" ).limit(10).all
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...