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

标签 sql ruby-on-rails ruby-on-rails-3 acts-as-taggable-on

因此,在为我的 rails 应用程序搜索标记 gem 后,我发现了惊人的 acts-as-taggable gem 。安装它并玩转我发现它将所有标签保存在一个标签数据库中,它只保存 Tag.name 而没有上下文,而不是上下文保存在 :through 关系数据库( taggings )中。对于大多数目的,我可以看到这是完美的。除了我的应用程序,我希望能够为用户提供基于预先存在的标签(例如不允许他们创建自己的标签)和 acts-as-taggable 进行标签的能力。无法在内置的一个上下文中搜索所有标签(例如,如果我要呈现标签数据库的自动完成功能,我会将我的应用程序中的所有标签都包括在内,这不是我想要的)

下面的方法是我刚刚充实的内容,看看它是否有效(它确实有效),但我想知道我是否遗漏了 acts-as-taggable 的东西。 .我的意思是我看不到任何提供这种方法的地方?

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

如果例如 acts-as-taggable不这样做,这是最好的方法吗?感觉有点低效,我最好做一个自定义 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)

最佳答案

您还可以使用如下语句:

# 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

关于sql - Acts-as-taggable-on 按上下文查找所有标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4595112/

相关文章:

php - 加载数据 INFILE 错误

sql - 在你的数据库表中有 "standard"列是常见的好做法吗?或者这是矫枉过正?

ruby-on-rails - 调用 attr_accessible 时出现 MassAssignmentSecurity 错误

ruby-on-rails - 对从 ActiveRecord 或 ThinkingSphinx 获取的集合进行排序

Mysql:获取每个组的第二个最早日期

java - Java 中的 SQL 构建器

html - 为什么 erb 模板中的字符串插值失败?

css - simple_form_for rails 内联单选按钮

ruby-on-rails - 在 Ruby on Rails 中呈现验证错误

jquery - 如何使用 jQuery 和 UJS 通过 AJAX 以 RJS 方式加载 HTML