我正在从我的用户那里收集尺码信息,因此当他们查看主产品页面时,他们只会看到符合其尺码的产品。我认为该解决方案涉及产品范围,但我不确定如何实施。有人对实现这一点的最佳方法有任何想法吗?
1 回答
查找要展示的产品的逻辑通常通过以下方式完成:
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
searcher 类可以访问当前用户,我假设您已经修改了当前用户以包含他们的大小。
您可以进行疯狂的查询以获取特定尺寸的所有产品。例如:
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
您设置的任何内容,您应该可以正常工作。
希望这能给你一个很好的起点。