gpt4 book ai didi

ruby-on-rails - 使用Spree搜索过滤器查找属性和变体

转载 作者:行者123 更新时间:2023-12-04 03:52:49 29 4
gpt4 key购买 nike

我正在运行Spree 1.3.1,并且正在尝试自定义Taxon显示页面。

我希望它返回当前分类单元中包含的产品,最终按属性或选项值进行过滤。

例如,假设我正在看内衣系列的分类单元。
我想通过提供一定的大小(option_type)来过滤显示的产品。
在这种情况下,我应该只列出具有要求尺寸的变体的产品。

我还希望能够通过“适合”属性来过滤产品。
通过滑动配合筛选,我应该只能列出当前Taxon内部具有所需属性的产品。

这是Taxon Controller 的show Action :

Spree::TaxonsController.class_eval do

def show
@taxon = Spree::Taxon.find_by_permalink!(params[:id])
return unless @taxon

@searcher = Spree::Config.searcher_class.new(params)
@searcher.current_user = try_spree_current_user
@searcher.current_currency = current_currency
@products = @searcher.retrieve_products

respond_with(@taxon)
end


end

我应该如何修改它以满足我的需求?

最佳答案

我部分解决了这个问题。

我发现我需要保持 Controller 原样,魔术在lib/spree/product_filters.rb文件中完成,在其中添加了这个新产品过滤器:

  if Spree::Property.table_exists?
Spree::Product.add_search_scope :fit_any do |*opts|
conds = opts.map {|o| ProductFilters.fit_filter[:conds][o]}.reject {|c| c.nil?}
scope = conds.shift
conds.each do |new_scope|
scope = scope.or(new_scope)
end
Spree::Product.with_property("fit").where(scope)
end

def ProductFilters.fit_filter
fit_property = Spree::Property.find_by_name("fit")
fits = Spree::ProductProperty.where(:property_id => fit_property).pluck(:value).uniq
pp = Spree::ProductProperty.arel_table
conds = Hash[*fits.map { |b| [b, pp[:value].eq(b)] }.flatten]
{ :name => "Fits",
:scope => :fit_any,
:conds => conds,
:labels => (fits.sort).map { |k| [k, k] }
}
end
end

然后,我将新的过滤器添加到Taxon模型装饰器中,如下所示:
Spree::Taxon.class_eval do

def applicable_filters
fs = []
fs << Spree::Core::ProductFilters.fit_filter if Spree::Core::ProductFilters.respond_to?(:fit_filter)
fs
end


end

仍然我还没有找到如何为具有特定选项值的变体创建过滤器的方法。

关于ruby-on-rails - 使用Spree搜索过滤器查找属性和变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14853046/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com