Отображение только самых популярных тегов в облаке тегов acts_as_taggable_on

#ruby-on-rails #ruby-on-rails-3 #acts-as-taggable-on

#ruby-on-rails #ruby-on-rails-3 #actes-as-taggable-on

Вопрос:

Acts-as-taggable отлично работает и все такое, но мне было интересно, есть ли способ ограничить облако тегов только самыми популярными тегами? Не так ли, похоже, что он упорядочивает мое облако по порядку, в котором были созданы теги.

Но более разумно, чтобы облако тегов отображало только самые популярные теги.

Мой контроллер имеет:

   def styles_tag_cloud
     @tags = Tattoo.tag_counts_on(:styles).limit(40)
  end
  

и мой взгляд имеет:

 <% tag_cloud(styles_tag_cloud, %w(css1 css2 css3 css4)) do |tag, css_class| %>
  <%= link_to tag.name, { :action => :tagged, :controller =>:index, :id => tag.name }, :class => css_class %>
<% end %>
  

Но все, что это делает, это отображает первые 40 созданных тегов, а затем определяет размер каждого тега в зависимости от того, сколько раз он использовался

Ответ №1:

Вы можете использовать MyModel.tag_counts_on(:tags) для получения списка тегов, упорядоченных по убыванию количества тегов (сначала наиболее используемый тег), и если вы хотите ограничить его определенным числом, вы можете просто добавить .limit(my_magic_number) к нему.

Итак, чтобы получить список из 10 самых популярных тегов в вашей Post модели, вы должны сделать что-то вроде этого:

 @tag_counts = Post.tag_counts_on(:tags).limit(10)
  

Если затем вы хотите узнать, сколько раз использовался каждый тег, объекты в @tags каждом имеют count атрибут, на который вы можете посмотреть.

РЕДАКТИРОВАТЬ: (извлечено из одного из моих комментариев ниже)…и если вы хотите разместить теги в определенном порядке (сначала наиболее часто используемые теги) с некоторым внешним ограничением, вы можете использовать это: Post.tag_counts_on(:tags).order('count desc').limit(however_many_you_want)

Комментарии:

1. tag_counts_on задокументировано здесь: github.com/mbleigh/acts-as-taggable-on (найдите «Вычисления облака тегов» на странице)

2. Я обновил свой вопрос, tag_counts_on simple захватывает все теги и подсчитывает каждый из них. Я пытаюсь либо упорядочить их по количеству тегов, либо отобразить только самые популярные теги

3. Ну, тогда сделайте что-то вроде Post.tag_counts_on(:tags).order('count desc').limit(however_many_you_want) .

4. Спасибо @Frost — на самом деле это решение.

Ответ №2:

Согласно документации, вам просто нужно передать параметры, необходимые для ваших вычислений, в вашем случае (контроллер):

   def styles_tag_cloud
     @tags = Tattoo.tag_counts_on(:styles).limit(40)
  end
  

Ваш вид остается прежним. С уважением!