过滤价格范围使用filtering_params [“price”]

时间:2015-06-30 20:35:35

标签: ruby-on-rails

到目前为止,我已经设置了按价格范围过滤所有产品,但我也有物品的销售价格,我需要将销售商品的销售价格包含在准确的过滤范围内。

例如,价格为50美元的商品售价为30美元,当我过滤30到40美元的范围时,我需要显示此商品,但只有在过滤40到50美元时才显示。

我在哪里以及如何包含“sale_price”? (还是新的和学习RoR)

listings_controller.rb 文件中,我有:

@listings = Listing.filter(params.slice(:category, :price))

我有一个模型>关注> filterable.rb 文件:

module Filterable
    extend ActiveSupport::Concern

    module ClassMethods
        def filter filtering_params

            return self.all if filtering_params.empty?

            if filtering_params["category"]
            results = self.includes(:category).where(categories: { name: filtering_params["category"] })

          elsif filtering_params["price"]
              min = filtering_params["price"].split('-').first
              max = filtering_params["price"].split('-').last
              results = self.where("price >= :min AND price <= :max", min: min, max: max)

          end
          results
        end
    end
end

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。

这是一个:

results = self.where("MIN(price, sale_price) >= :min AND MIN(price, sale_price) <= :max", min: min, max: max)

这假定始终设置sale_price。如果不是,你可以这样做:

results = self.where("(price >= :min AND price <= :max) OR (sale_price IS NOT NULL AND sale_price >= :min AND sale_price <= :max)", min: min, max: max)