Получить самые комментируемые объекты
Я использую гем от 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)