我正在收集用户的尺寸信息,因此当他们查看主要产品页面时,他们只能看到尺寸可用的产品。我认为解决方案涉及产品范围,但我不确定如何实现它。任何人对实现这个的最佳方法有任何想法吗?
答案 0 :(得分:4)
查找要显示的产品的逻辑通常由以下人员完成:
https://github.com/spree/spree/blob/v2.1.1/core/lib/spree/core/controller_helpers/search.rb#L5-L9
这里使用的一个例子是: https://github.com/spree/spree/blob/v2.1.1/frontend/app/controllers/spree/products_controller.rb#L10
默认情况下,它会使用此代码查找产品
https://github.com/spree/spree/blob/v2.1.1/core/lib/spree/core/search/base.rb#L15-L24
为了覆盖它,您可以覆盖searcher_class配置:
https://github.com/spree/spree/blob/v2.1.1/core/app/models/spree/app_configuration.rb#L101-L108
搜索者类可以访问当前用户,我假设您已修改当前用户以包含其大小。
你可以做一个疯狂的查询来获得一定规模的所有产品。例如:
Spree::Product.joins(:variants_including_master => :option_values)
.where('spree_option_values.presentation = ? AND
spree_option_values.option_type_id = ?', 'XL',
Spree::OptionType.find_by_name('tshirt-size').id)
将'XL'替换为current_user.size
或您设置的任何内容,您应该可以正常工作。
希望能为你提供一个好的起点。