Ваше текущее решение неплохое (это единственный запрос), но его можно улучшить.
Функцию встроенного счетчика кеша ActiveRecord можно использовать для хранения количества связанных объектов в родительском (в данном случае числе сообщений, связанных с пользователем). После этого вы можете обработать запрос, как это:
User.where('posts_count > 0').order('name ASC')
здесь находятся документы на :counter_cache
(taken from here):
: counter_cache
кэшей количество принадлежащих объектов на ассоциированном классе через использование increment_counter и decment_counter. Счетчик кеша увеличивается, когда объект этого класса создается и уменьшается при его уничтожении. Для этого требуется, чтобы столбец с именем # {table_name} _count (например, comment_count для принадлежащего класса Comment) использовался в ассоциированном классе (например, класс Post) - это миграция для # {table_name} _count создается в ассоциированном class (такой, что Post.comments_count вернет отсчет кеширования, см. примечание ниже). Вы также можете указать столбец кэша настраиваемых столбцов, указав вместо этого значение столбца вместо значения true/false (например, counter_cache:: my_custom_counter.) Примечание. Указание кеша-счетчика добавит его в список атрибутов readonly с этой моделью, используя attr_readonly.
Вы можете взглянуть на это и изменить его соответственно: http://stackoverflow.com/questions/4314987/find-all-posts-with-more-than-a-defined-number-of-comments –