2011-10-08 102 views
5

使用标记的行为效果很好,但是我想知道是否有办法将标签云限制为只有最流行的标签?没错,它看起来像是按照创建标签的顺序排列我的云。只显示acts_as_taggable_on标签云中最受欢迎的标签

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

我的控制器有:

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个标记,然后大小每个标签根据多少倍已使用

回答

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)

+0

'tag_counts_on'记录在这里:https://github.com/mbleigh/acts-as-taggable-on(在页面上搜索“标签云计算”) – Frost

+0

我更新了我的问题,tag_counts_on简单地抓住了所有人标签并统计每一个。我试图按标签数量排序,或者只显示最受欢迎的标签 – rugbert

+4

好吧,然后执行'Post.tag_counts_on(:tags).order('count desc')。limit(however_many_you_want)''。 – Frost

1

根据文档,你只需要通过你需要为你的计算,你的情况的选项(控制器):

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

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