3

我正在从我的用户那里收集尺码信息,因此当他们查看主产品页面时,他们只会看到符合其尺码的产品。我认为该解决方案涉及产品范围,但我不确定如何实施。有人对实现这一点的最佳方法有任何想法吗?

4

1 回答 1

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

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您设置的任何内容,您应该可以正常工作。

希望这能给你一个很好的起点。

于 2013-10-01T16:07:35.460 回答