3

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

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

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

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

我如何使用作为可标记的行为来做到这一点?

我尝试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个标签。是订的吗?我如何知道每个标记了多少项目?

4

1 回答 1

4

您可以使用模型类上的 tag_counts 来检索标签列表及其单个计数。

具有默认“技能”范围的用户模型示例(由文档提供)。

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

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

此外,还有一个关于这个主题的 RailsCast,解释了这个 gem:

问题编辑后编辑: 您拥有Item.tag_counts的列表是具有count属性的标签列表。我不确定它们是否已经排序,但您可以按此属性对它们进行排序,如下所示:

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

为最终答案目的编辑

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

tags = Item.tag_counts.order(:count)
于 2013-05-08T22:40:53.633 回答