根据上下文返回所有标签 - ActsAsTaggableOn

jay*_*jay 10 tags ruby-on-rails acts-as-taggable-on ruby-on-rails-3

我正在使用rails gem act-as-taggable,并在两个上下文中标记帖子:标签和主题.

要返回到目前为止用于帖子的所有主题标签的哈希,我可以使用代码:

 Post.tag_counts_on(:topics)
Run Code Online (Sandbox Code Playgroud)

但是,我已创建了一定数量的设置主题标签,如果其中某些主题标签当前未用作帖子上的标签,则上述代码不会返回所述主题.

我想知道是否有办法根据上下文返回所有相关标签 - 我希望有一个解决方案:

 topics = Tag.topics
Run Code Online (Sandbox Code Playgroud)

为了实现该解决方案,我创建了一个Tag.rb模型:

 class Tag < ActiveRecord::Base
   has_many :relationship_topics, :foreign_key => "topic_followed_id", :dependent => :destroy
   has_many :topic_followers, :through => :relationship_topics, :source => :topic_follower
 end
Run Code Online (Sandbox Code Playgroud)

这里我有一些代码允许以下主题,但仅此而已.

有谁知道如何根据上下文返回所有标签?

rub*_*ish 16

我从未使用过act-as-taggable-on,但快速浏览代码表明,你可以这样做:

# to get all the tags with context topic with counts
ActsAsTaggableOn::Tagging.
    includes(:tag).
    where(:context => "topics").
    group("tags.name").
    select("tags.name, COUNT(*) as count")
Run Code Online (Sandbox Code Playgroud)

您可能应该查看ActsAsTaggableOn :: Tagging,ActsAsTaggableOn :: Tag以及db/migrations文件夹中的迁移文件,以了解如何进行此操作.

如果您不想要计数,只需要标记名称:

tags = ActsAsTaggableOn::Tag.includes(:taggings).
           where("taggings.context = 'topics'").
           select("DISTINCT tags.*")

# usage
tags.each {|tag| puts tag.name}
Run Code Online (Sandbox Code Playgroud)

我希望能回答你的问题.