0

我有 2 个模型 Product 和 Tag 具有多对多关系。

class Product < ActiveRecord::Base
  has_many :product_tags
  has_many :tags, through: :product_tags
end

class Tag < ActiveRecord::Base
  has_many :product_tags
  has_many :products, through: :product_tags
end

和关系模型:

class ProductTag < ActiveRecord::Base
  belongs_to :product
  belongs_to :tag
end

通过给定标签列表搜索产品的最佳方式是什么?产品必须具有所有标签,而不仅仅是其中一个。

4

2 回答 2

0

尝试

products = Product.joins(:tags)
tags.each do |tag|
  products = products.where(tags: { name: tag })
end

tags包含您要搜索的标签列表,我假设该标签有一个name属性

于 2013-02-03T00:15:20.873 回答
0

我在这里找到了答案https://stackoverflow.com/a/11887362/808175。所以在我的情况下是:

tags = ['1', '2', '3']
Product.joins(:tags)
       .where(:tags => {:id => tags})
       .group('products.id')
       .having("count(product_tags.tag_id) = #{tags.count}")
于 2013-02-09T01:51:48.957 回答