'How to write active record using using scope
How to write active record for price less than or equal to and price less than or equal to by scope in Ruby?
I tried like this:
scope :price, -> (price_lteq_or_price_gteq) { where("price_paisas >= ? or price_paisas <= ?", price_lteq_or_price_gteq, price_lteq_or_price_gteq)}
Controller
def index
@properties = Property.where(:status=>'1')
@properties = @properties.status(params[:status]) if params[:status].present?
@properties = @properties.price(params[:price_lteq]) if params[:price_lteq].present?
@properties = @properties.price(params[:price_gteq]) if params[:price_gteq].present?
end
When I tried like this, I got query like this:
SELECT `properties`.* FROM `properties` WHERE
`properties`.`status` = '1' AND (price_paisas >= '000' or price_paisas <= '000')
AND (price_paisas >= '49900' or price_paisas <= '49900')
What I need is active record like this
SELECT `properties`.* FROM `properties` WHERE
`properties`.`status` = '1' AND
(price_paisas >= '000' and price_paisas <='49900')
How to do so?
Solution 1:[1]
Try this
Scope:
price_gteq = 0, price_lteq= 49900
scope :price, -> (price_lteq, price_gteq) { where("price_paisas >= ? or price_paisas <= ?", price_gteq, price_lteq)}
Controller:
def index
@properties = Property.where(:status=>'1')
@properties = @properties.status(params[:status]) if params[:status].present?
@properties = @properties.price(params[:price_lteq],params[:price_gteq]) if params[:price_lteq] && params[:price_gteq]
end
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | dp7 |
