如何使用范围编写活动记录

时间:2016-04-25 10:18:59

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

如何为价格小于或等于价格小于或等于ruby中的范围编写有效记录。

我试过这样。

scope :price, -> (price_lteq_or_price_gteq) { where("price_paisas >= ? or price_paisas <= ?", price_lteq_or_price_gteq, price_lteq_or_price_gteq)}

控制器

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

当我这样尝试时,我得到了这样的查询

SELECT `properties`.* FROM `properties` WHERE `properties`.`status` = '1' AND (price_paisas >= '000' or price_paisas <= '000') AND (price_paisas >= '49900' or price_paisas <= '49900')

`

我需要的是像这样的活跃记录

SELECT `properties`.* FROM `properties` WHERE `properties`.`status` = '1' AND (price_paisas >= '000' and price_paisas <='49900')

怎么做。 请帮忙。任何帮助都很明显。

1 个答案:

答案 0 :(得分:1)

试试这个

<强>范围:

price_gteq = 0,price_lteq = 49900

scope :price, -> (price_lteq, price_gteq) { where("price_paisas >= ? or price_paisas <= ?", price_gteq, price_lteq)}

<强>控制器:

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