2015-06-30 60 views
0

到目前爲止,我已經設置了按價格範圍過濾所有產品,但我也有物品的銷售價格,並且我需要將銷售商品的銷售價格包含在精確的過濾範圍。使用filtering_params過濾價格範圍[「價格」]

例如,價格爲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

有幾種方法可以做到這一點。

這裏有一個:

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) 
+0

似乎順理成章,但是,我得到這個錯誤:「PG :: UndefinedFunction:ERROR:功能分鐘(數字,數字)不存在」 – aep

+0

當我將min =更改爲「min = filtering_params [」price,sale_price「]。split(' - ')。first」時,我現在得到一個錯誤:「未定義的方法'split'for nil:NilClass」。我應該把sale_price放在「min = ...」之外嗎?我需要把它定義在正確的地方嗎? – aep

+0

感謝Finbarr的快速回復,我試過你的第二個選項,它過濾了,但仍然沒有過濾sales_price。 – aep