基本上,我想按照标签的数量对所有标签进行排序。
我正在尝试使用标签创建导航。所以我想只显示前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)