繁体   English   中英

Rails,与named_scope一起使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM