[英]Rails, working with named_scope
我需要选择从搜索表单提交的一些动态价格范围。 我应该如何用示波器来解决这个问题? 我正在寻找这样的东西
Painting.price_range(['1..500','2000..5000'])
SELECT * FROM paintings WHERE price BETWEEN 1..500 **OR** BETWEEN 2000..5000 etc.
最好的祝福。 AsbjørnMorell。
named_scope :price_range, :conditions => ["(price BETWEEN 1 AND 500) OR (price BETWEEN 2000 AND 5000)"]
要么
named_scope :price_range, :conditions => ["(price ?) OR (price ?)", (1..500).to_s(:db), (2000..5000).to_s(:db)]
动态
named_scope :price_between, lambda { |from, to| { :conditions => ['price > ? AND price <= ?', from, to] } }
named_scope :price_between, lambda { |from, to| { :conditions => ['price BETWEEN ? AND ?', from, to] } }
->
MyModel.price_between(1,100)
您需要在named_scope上使用lambda。 以下应该工作:
named_scope :price_range, lambda { |ranges|
{
:conditions => ["(" +
ranges.collect {"price between ? and ?"}.join(" or ") +
")"] +
ranges.collect {|r| [r.min, r.max]}.flatten
}
}
第一个ranges.collect
根据您所拥有的范围创建尽可能多的“ between ? and ?
” between ? and ?
检查,然后第二个ranges.collect
平范围并将它们添加为要清除的条件值。 为了安全起见,我在括号周围贴了括号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.