狂欢1.3:如何仅向用户显示其大小的可用产品

时间:2013-10-01 15:42:29

标签: ruby-on-rails ruby ruby-on-rails-3 spree

我正在收集用户的尺寸信息,因此当他们查看主要产品页面时,他们只能看到尺寸可用的产品。我认为解决方案涉及产品范围,但我不确定如何实现它。任何人对实现这个的最佳方法有任何想法吗?

1 个答案:

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

希望能为你提供一个好的起点。