到目前为止,我已经设置了按价格范围过滤所有产品,但我也有物品的销售价格,我需要将销售商品的销售价格包含在准确的过滤范围内。
例如,价格为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
提前感谢您的帮助。
答案 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)