Отображение только самых популярных тегов в облаке тегов activ_as_taggable_on - PullRequest
5 голосов
/ 08 октября 2011

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 созданных тегов, а затем измеряет каждый тег в соответствии с тем, сколько раз он использовался

Ответы [ 2 ]

7 голосов
/ 08 октября 2011

Вы можете использовать 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 голос
/ 23 июля 2012

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

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

Ваше мнение остается прежним. Привет! * * 1004

...