Получить самые комментируемые объекты

Я использую гем от https://github.com/elight/acts_as_commentable_with_threading, чтобы пользователи могли комментировать мои сообщения в блоге.

Сейчас я хочу отобразить большинство комментариев, но я не знаю, как их запрашивать (и, насколько я знаю, гем не предоставляет такой метод). Можете ли вы написать мне несколько советов или идей, как этого добиться?

2 ответа

Решение

Вот метод, который я использую, чтобы вернуть топ пользователей, которые разместили наибольшее количество элементов. Это может помочь вам с вашей проблемой. Я поместил это в Application Helper, потому что он является частью моей боковой панели навигации и будет использоваться на каждой странице в веб-приложении.

def top_posters
    User.all(:select => "users.*, COUNT(user_id) as post_count",
       :joins => "LEFT JOIN posts AS posts ON posts.user_id = users.id",
       :group => "posts.user_id",
       :order => "post_count DESC",
       :limit => 5)
end

На мой взгляд, у меня есть

<% top = top_posters() %>
<% for t in top %>
    <li><%= link_to t.username, user_path(t) %>
        (<%= t.posts.public_posts.count %>)</li>
<% end %>

Для рельсов 4+

Вы должны использовать что-то вроде этого:

Article.select("articles.*, COUNT(commentable_id) as comments_count")
                    .joins("LEFT JOIN comments AS comments ON comments.commentable_id = articles.id")
                    .group("comments.commentable_id")
                    .order("comments_count DESC")
                    .where("commentable_type = 'Article'")
                    .limit(5)
Другие вопросы по тегам