2014-01-19 3 views
1

Я пытаюсь отобразить в своем столе самые популярные слова, упорядоченные по количеству показов. Затем добавьте каминари для разбивки по страницам.Rails 3.2 group count with Kaminari

в мой контроллер я попробовал:

@tag_answers = Tag.group(:content).page(params[:page]).order("count_all DESC").count 

и на мой взгляд:

<table> 
    <thead> 
    <th>Tag</th> 
    <th>Count</th> 
    </thead> 
    <tbody> 
    <% @tag_answers.each do |tag_content, tag_count| %> 
     <tr> 
     <td> <%= tag_content %> </td> 
     <td> <%= tag_count %> </td> 
     </tr> 
    <% end %> 
    </tbody> 
</table> 
<%= paginate @tag_answers %> 

, но я получаю следующее сообщение об ошибке

undefined method `current_page' for #<ActiveSupport::OrderedHash:0x000001031b8678> 

ответ

1

Попробуйте

@tag_answers = Tag.group(:content).select('content, COUNT(*) as count').order("count DESC").page(params[:page]) 
+0

Да, это сработало! благодаря! Для ответа, в представлении мне пришлось изменить каждый блок с помощью '<% @ tag_answers.each do | tag | %> 'или' <% @ tag_answers.each_with_index | тег, индекс | %> 'и отобразить счетчик' <% = tag.count%> '. Отлично! Также он безопасен SQL? –

+0

Да, использование raw sql опасно, но тип результата должен быть ActiveRecord :: Relation вместо ActiveSupport :: OrderedHash для использования разбивки на страницы. Кстати, кажется, что трудно вводить код в этот необработанный sql. –