rails 4中的语法不断发展,但不清楚如何适应多种条件,尤其是范围。所以
Circuit.where(origin_lon: (@lng_min.to_f..@lng_max.to_f), origin_lat: (@lat_min.to_f..@lat_max.to_f))
使用逗号进行AND
查询。但是,如果要添加另一个AND
子句,该子句由两个OR
条件组成,the api QueryMethods instructions do not clear up如何写这个:
Circuit.where(origin_lon: (@lng_min.to_f..@lng_max.to_f), origin_lat: (@lat_min.to_f..@lat_max.to_f), ('when_start >= ? OR when_end <= ?', @earliest_start, @latest_start) )
导致语法错误
答案 0 :(得分:1)
您无法将SQL样式where
条件与纯红宝石where
条件混合使用。您需要拆分where
。
Circuit.where(origin_lon: @lng_min.to_f..@lng_max.to_f, origin_lat: @lat_min.to_f..@lat_max.to_f).where('when_start >= ? OR when_end <= ?', @earliest_start, @latest_start)
您还可以使用范围清除一点语法并使代码更具可重用性
class Circuit < ActiveRecord::Base
scope :longitude, ->(min, max) { where(origin_lon: min.to_f..max.to_f) }
scope :latitude, ->(min, max) { where(origin_lat: min.to_f..max.to_f) }
end
Circuit.longitude(@lng_min, @lng_max).latitude(@lat_min, @lat_max).where('when_start >= ? OR when_end <= ?', @earliest_start, @latest_start)