查找标有ALL标签的帖子

use*_*826 -1 activerecord ruby-on-rails ruby-on-rails-4

我有一个PostTag模型通过Tagging模型加入has_many :through

params[:tag_ids]从我的表单传入,我正在尝试获取所有标记有所有标记的帖子(不仅仅是标记中的任何一个).

我正在尝试以下方法:

@ftags = params[:tags_ids]

@objArray = Array.new

@ftags.each do |tag| 
  @array = Tagging.where("tag_id=#{tag}")
  @objArray.push @array
end
Run Code Online (Sandbox Code Playgroud)

...现在我想做的是以某种方式组合这些查询以获得正确的帖子.在我只有两个查询之前,我曾经和merge命令结合使用,如下所示:

@result = @query1.merge(@query2)
Run Code Online (Sandbox Code Playgroud)

...但是现在我有一些动态的查询,我仍然希望最终将它们组合起来.如何在特定列的特定值的循环内进行合并?

jan*_*oeh 5

您有一个标记ID列表,并希望查找包含所有这些标记的所有帖子:

# contains [1, 2, 3]
tag_ids = params[:tag_ids]

Post.joins(:taggings)
    .where(taggings: { tag: tag_ids })
    .group('posts.id')
    .having("count(taggings.id) = #{tag_ids.length}")
Run Code Online (Sandbox Code Playgroud)