仅显示acts_as_taggable_on标记云中最常用的标记

rug*_*ert 5 ruby-on-rails acts-as-taggable-on ruby-on-rails-3

Acts-as-taggable效果很好,但是我想知道是否有办法将标签云限制为只有最流行的标签?是的,它看起来像按照创建标签的顺序对我的云进行排序.

但是让标签云只显示最受欢迎的标签更有意义.

我的控制器有:

  def styles_tag_cloud
     @tags = Tattoo.tag_counts_on(:styles).limit(40)
  end
Run Code Online (Sandbox Code Playgroud)

我的观点是:

<% 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 %>
Run Code Online (Sandbox Code Playgroud)

但所有这一切都是显示创建的前40个标签,然后根据其使用的次数确定每个标签的大小

Fro*_*ost 7

您可以使用MyModel.tag_counts_on(:tags)获取标记列表,按标记计数降序排序(最常用的标记首先),如果要将其限制为特定数字,则可以添加.limit(my_magic_number)到标记列表.

因此,要获得Post模型中10个最受欢迎的标签列表,您可以执行以下操作:

@tag_counts = Post.tag_counts_on(:tags).limit(10)
Run Code Online (Sandbox Code Playgroud)

如果您想查看每个标记的使用次数,每个标记中的对象@tags都有一个count您可以查看的属性.

编辑:(摘自我下面的一条评论)...如果你想要特定顺序的标签(最常用的标签)具有一些外部定义的限制,你可以使用: Post.tag_counts_on(:tags).order('count desc').limit(however_many_you_want)

  • 那么,做一些像`Post.tag_counts_on(:tags).order('count desc').limit(except_many_you_want)`. (4认同)