【问题标题】:Acts-as-taggable-on find all tags by contextActs-as-taggable-on 按上下文查找所有标签
【发布时间】:2011-06-03 11:11:19
【问题描述】:

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

下面的方法是我刚刚充实的,看看它是否有效(它确实有效),但我想知道我是否遗漏了 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)

【问题讨论】:

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


    【解决方案1】:

    我相信有办法: User.tag_counts_on(:tags)

    => [#<ActsAsTaggableOn::Tag id: 1, name: "foo">,
    #<ActsAsTaggableOn::Tag id: 2, name: "bar">,
    #<ActsAsTaggableOn::Tag id: 3, name: "sushi">,
    #<ActsAsTaggableOn::Tag id: 4, name: "pizza">]
    

    【讨论】:

      【解决方案2】:

      您也可以使用如下语句:

      # 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
      

      【讨论】:

      • 这个解决方案仍然需要之前标记模型实例。如何为给定的上下文定义某些预定义的标签?
      猜你喜欢
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多