我有一个Author
模型has_many :posts
,has_many :comments
它也可以taggable
基于Tagging
和Tag
模型#39;发布在下面。
class Tagging
belongs_to :tag
belongs_to :taggable, polymorphic: true
end
class Tag
has_many :taggings
has_many :posts, through: :taggings, source: :taggable, source_type: 'Post'
has_many :authors, through: :taggings, source: :taggable, source_type: 'Author'
end
这是我的Author
模型的样子。
class Author
has_many :posts
has_many :comments
has_many :taggings, as: :taggable
has_many :tags, through: :taggings
end
我尝试了几种类型的查询,但我的所有尝试都会出错,而我无法理解如何获取我想要的数据。基本上我想为以下场景运行查询:
@author = Author.find(1)
。如何获取作者创建的标签分组的所有相关评论和帖子?我不确定如何构建这个AR对象。@taggable = @author.tagging.joins(:tag).where(tags: {name: @tag_name})
,但我无法做到。由于
答案 0 :(得分:0)
如果您使用的是gem acts_as_taggable,那么使用tagged_with实用程序很容易找到可标记的记录。
##get the author
@author = Author.find params[:id]
##get the authors category/tags
cat = @author.tags
##find all post/comments that are tagged with cat
Author.includes(:post, :comments, :tags).tagged_with(cat,:any=>true)}.flatten.compact.uniq
如果您没有使用acts_as_taggable :(,那么您必须构建自己的查询...这可能是这样的..
Author.includes(:post, :comments, :tags).where(tags: {taggable_type: 'Author',taggable_id: @author.id}).flatten.compact.uniq