2013-02-02 62 views
0

我有2個產品和標籤,具有多對多的關係。Ruby on Rails:通過標籤列表過濾所有產品的最佳方式

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 

什麼會給出標籤的列表來搜索產品最優化的方式?產品必須包含所有標籤,而不僅僅是其中的一個。

回答

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}") 
0

嘗試

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

tags包含您要搜索的標籤列表,我假設標籤都有一個name屬性