通过以下自定义,我能够在 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
这对我有用,感觉很轻松。但是,我愿意接受更好的选择。