首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails,使用named_scope

Rails,使用named_scope
EN

Stack Overflow用户
提问于 2009-07-21 08:48:21
回答 2查看 445关注 0票数 1

我需要选择一些从搜索表单提交的动态价格范围。我应该如何使用作用域呢?我正在找这样的东西。

Painting.price_range('1..500','2000..5000')

代码语言:javascript
复制
SELECT * FROM paintings WHERE price BETWEEN 1..500 **OR** BETWEEN 2000..5000 etc.

诚挚的问候。Asbjørn Morell

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-21 09:52:15

您需要在named_scope上使用lambda。下面的代码应该可以工作:

代码语言:javascript
复制
  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周围加了括号。

票数 2
EN

Stack Overflow用户

发布于 2009-07-21 09:42:25

代码语言:javascript
复制
named_scope :price_range, :conditions => ["(price BETWEEN 1 AND 500) OR (price BETWEEN 2000 AND 5000)"]

代码语言:javascript
复制
named_scope :price_range, :conditions => ["(price ?) OR (price ?)", (1..500).to_s(:db), (2000..5000).to_s(:db)]

动态

代码语言:javascript
复制
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] } }

->

代码语言:javascript
复制
MyModel.price_between(1,100)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1158016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档