5

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 个标签,然后根据每个标签的使用次数调整其大小

4

2 回答 2

7

您可以使用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)

于 2011-10-08T15:36:56.197 回答
1

根据文档,您只需传递计算所需的选项,在您的情况下(控制器):

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

你的观点保持不变。问候!

于 2012-07-23T00:22:46.337 回答