查找包含特定多个标签的所有产品

时间:2018-03-12 16:46:34

标签: ruby-on-rails associations rails-activerecord

我想找到只有一组特定标签的产品。

例如:包含两个或更多id的数组:[1,2] 并仅返回具有这两个标签的产品。

我使用了Product.includes(:tags).where('tags.id' => [64, 65]).all,但这会返回包含 这些标记的所有产品。

以下是我的模特:

# models/product.rb
has_many :taggings, dependent: :destroy
has_many :tags, through: :taggings

# models/tag.rb
has_many :taggings
has_many :products, through: :taggings

# models/tagging.rb
belongs_to :product
belongs_to :tag

1 个答案:

答案 0 :(得分:0)

如果您有tag_ids = [64, 65],可能会执行以下操作:

tag_ids.each_with_object(Product.includes(:tags)) do |tag_id, query_base|
  query_base.where('tags.id' => tag_id)
end

我认为应该and where products,并且tags具有所有指定的{{1}}。