Пользователь, у которого есть has_many, как правильно найти пользователя с наибольшим? - PullRequest
0 голосов
/ 05 марта 2012

Я пишу приложение, в котором у каждого пользователя много постов.Я хотел бы создать топ-3 пользователей с наибольшим количеством сообщений.Единственный способ, которым я могу придумать, - это получить все сообщения и посчитать, сколько у каждого пользователяЭто кажется чрезвычайно дорогим и не масштабируемым.Точность важна.У кого-нибудь есть предложения?

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

Вы, вероятно, ищете здесь counter_cache: ознакомьтесь с документацией ассоциации ActiveRecord . По сути, если у вас есть целочисленный столбец posts_count со значением по умолчанию 0 в таблице пользователей и в ассоциации установлено значение: counter_cache, равное true, Rails автоматически обновит столбец. Тогда вы можете просто сделать что-то вроде User.order('posts_count DESC').limit(3), чтобы получить пользователей с наибольшим количеством сообщений.

1 голос
/ 05 марта 2012

Post.group(:user_id).order("count_all DESC").limit(3).count

должны сделать эту работу.Он группирует посты пользователя, упорядочивает их по количеству постов и возвращает только 3 с наибольшим количеством постов.SQL-запрос может быть более простым для понимания:

(0.3ms) SELECT COUNT(*) AS count_all, user_id AS user_id FROM "posts" GROUP BY user_id ORDER BY count_all DESC LIMIT 3

, и rails возвращает для вас хэш, подобный этому:

{user_id => number_of_posts, user_id => number_of_posts, user_id => number_of_posts}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...