使用actions -as- tagable -on,我如何在我的应用中找到最重要的,比如说10个标签



基本上,我想按照标签的数量对所有标签进行排序。

我正在尝试使用标签创建导航。所以我想只显示前5、10、15、X个标签,按它们所标记的项目数量排序。

所以我不能在模型上做任何操作,也没有控制器我可以在其中做我可能只能在导航视图部分中做。

但是我甚至不知道如何查询acts-as- tagable -on来让我找到系统中最前面的X个标签。

如何使用actions -as- tagable -on?

我尝试了Tag模型,但这似乎不起作用。

编辑1

当我调用Item.tag_counts时,我看到的是:

> Item.tag_counts
   (17.4ms)  SELECT items.id FROM "items" 
  ActsAsTaggableOn::Tag Load (17.1ms)  SELECT tags.*, taggings.tags_count AS count FROM "tags" JOIN (SELECT taggings.tag_id, COUNT(taggings.tag_id) AS tags_count FROM "taggings" INNER JOIN items ON items.id = taggings.taggable_id WHERE (taggings.taggable_type = 'Item' AND taggings.context = 'tags') AND (taggings.taggable_id IN(13)) GROUP BY taggings.tag_id HAVING COUNT(taggings.tag_id) > 0) AS taggings ON taggings.tag_id = tags.id
 => [#<ActsAsTaggableOn::Tag id: 2, name: "paper">, #<ActsAsTaggableOn::Tag id: 1, name: "notepad">] 

这是系统中的2个标签。点菜了吗?我如何知道每个标签上有多少件物品?

您可以在模型类上使用tag_counts来检索标记列表和它们各自的计数。

带有默认"skill"作用域的用户模型示例(由文档提供)。

User.skill_counts # => [<Tag name="joking" count=2>,<Tag name="clowning" count=1>...]

你也可以使用基本相同的tag_counts_on(scope, options)

同样,有一个关于这个主题的RailsCast,解释了这个gem:

EDIT after question edition:Item.tag_counts的列表是具有count属性的标签列表。我不确定它们是否已经排序了,但你可以按这个属性排序,像这样:

tags = Item.tag_counts.sort_by {|tag| tag.count}

编辑最终答案

或者上面查询的Rails 3版本:

tags = Item.tag_counts.order(:count)

最新更新