Acts-as-taggable-on按上下文查找所有标记

因此,在为我的rails应用程序搜索标记gem之后,我发现了令人惊叹的行为 – 作为可标记的gem。 安装它并玩游戏我发现它将所有标记保存在标记db中,它只保存没有上下文的Tag.name,而是保存在:through relationship db(taggings)中。 在大多数情况下,我可以看到这是完美的。 除了我的应用程序,我希望能够为用户提供基于预先存在的标签进行标记的能力(例如,不允许他们创建自己的标签), 并且作为标签的行为无法搜索所有标签在内置的一个上下文中(例如,如果我要呈现标记db的自动完成,我将包含我的应用程序中的所有标记,这不是我想要的)

下面的方法是我刚刚充实,以确定它是否会起作用(它确实如此)但我想知道我是否遗漏了一些带有act-as-taggable的东西 。 我的意思是我看不到提供这种方法的任何地方?

   

如果例如act-as-taggable不这样做,这是最好的方法吗? 感觉有点不高性能,我会更好地进行自定义SQL查询而不是通过act-as-taggable进行路由吗?

如果它有助于我的日志的尾巴:

 Started GET "/users" for 127.0.0.1 at 2011-01-04 14:46:20 +0000 Processing by UsersController#index as HTML SQL (0.5ms) SELECT name FROM sqlite_master WHERE type = 'table' AND NOT name = 'sqlite_sequence' User Load (0.1ms) SELECT "users".* FROM "users" ActsAsTaggableOn::Tagging Load (0.5ms) SELECT "taggings".* FROM "taggings" WHERE ("taggings"."context" = 'languages') ActsAsTaggableOn::Tag Load (0.1ms) SELECT "tags".* FROM "tags" WHERE ("tags"."id" = 2) LIMIT 1 Rendered users/index.html.erb within layouts/application (10.4ms) 

您还可以使用如下语句:

 # Returns all the tags for the specified model/context with a count >= 1 @tags = YourModel.tag_counts_on(**context**) 

添加限制和订单:

 # Get the top 5 tags by count @tags = YourModel.tag_counts_on(**context**, :limit => 5, :order => "count desc") 

使用tag_counts_on返回的标记的count属性访问计数

 tag.count 

我相信有这样的方式: User.tag_counts_on(:tags)

 => [#, #, #, #]