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}