我需要选择一些从搜索表单提交的动态价格范围。我应该如何使用作用域呢?我正在找这样的东西。
Painting.price_range('1..500','2000..5000')
SELECT * FROM paintings WHERE price BETWEEN 1..500 **OR** BETWEEN 2000..5000 etc.诚挚的问候。Asbjørn Morell
发布于 2009-07-21 09:52:15
您需要在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 ?“检查,然后第二个ranges.collect展平范围,并将它们作为值添加到条件中。为了安全起见,我在on周围加了括号。
发布于 2009-07-21 09:42:25
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)https://stackoverflow.com/questions/1158016
复制相似问题