Мне удалось заставить это работать в Spree 2.1.0.beta со следующими настройками:
На основании ответа здесь: Поиск записей с двумя конкретными записями в другой таблице
Я добавил новую область продукта в /app/models/spree/product_decorator.rb
Spree::Product.class_eval do
add_search_scope :in_all_taxons do |*taxons|
taxons = get_taxons(taxons)
id = arel_table[:id]
joins(:taxons).where(spree_taxons: { id: taxons }).group(id).having(id.count.eq(taxons.size))
end
end
Затем использовал новую область, добавив ее в /app/models/spree/base_decorator.rb
Spree::Core::Search::Base.class_eval do
def get_base_scope
base_scope = Spree::Product.active
base_scope = base_scope.in_all_taxons(taxon) unless taxon.blank?
base_scope = get_products_conditions_for(base_scope, keywords)
base_scope = add_search_scopes(base_scope)
base_scope
end
end
Теперь я могу использовать стандартный помощник по поиску для поиска товаров (что означает, что я все еще могу указывать ключевые слова и т. Д. Вместе с несколькими таксонами):
# taxon_ids is an array of taxon ids
@searcher = build_searcher(params.merge(:taxon => taxon_ids))
@products = @searcher.retrieve_products
Это работает для меня и чувствуется довольно безболезненно. Тем не менее, я открыт для лучших вариантов.