一尘不染

作为可标记行为,按上下文查找所有标记

sql

因此,在为我的rails应用程序搜索了标记宝石之后,我发现了惊人的行为即可标记宝石。安装它并玩转我发现它将所有标签保留在标签db中,该标签db仅包含Tag.name,而没有上下文,而是将上下文保存在:through关系db(taggings)中。对于大多数目的,我可以看到这是完美的。除了我的应用程序外,我希望能够为用户提供基于预先存在的标签进行标记的功能(例如,不允许他们创建自己的标签),并且行为可标记不具备搜索所有标签的功能在一个内置的上下文中(例如,如果我要呈现标签db的自动完成,则我的应用中将包含所有标签,这不是我想要的)

下面的方法是我刚刚充实的,看它是否可以工作(确实可以),但是我想知道是否丢失了一些行为可标记的东西。我的意思是我看不到任何提供这种方法的地方?

<% ActsAsTaggableOn::Tagging.find_all_by_context("tags").each do |tagging| %>
  <%= tagging.tag %>
<% end %>

例如,如果不能按行为作为标签执行此操作,这是否是执行此操作的最佳方法?感觉有些不尽人意,我是否最好做一个自定义SQL查询,而不是通过acts-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)

阅读 155

收藏
2021-03-17

共1个答案

一尘不染

您还可以使用如下语句:

# 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")

使用count从中返回的标签的属性访问计数tag_counts_on

tag.count
2021-03-17