当查询执行时,Rails范围不起作用

时间:2012-03-03 14:48:40

标签: sql ruby-on-rails activerecord scopes

我正在尝试在Products类中构建一个相对简单的命名范围。奇怪的是,如果我直接发出查询(la Product.where()),我会得到我期望的结果。但是,如果此查询更改为scope声明,则结果集为nil

为什么我的查询在直接调用时有效,但在将其作为范围时不产生任何内容?这是实际的代码:

scope :is_queued, where("status = 2 OR (status = 0 AND status_expires > ?)", DateTime.now )# <-- returns nil
Product.where("status = 2 OR (status = 0 AND status_expires > ?)", DateTime.now) # <-- returns 1+ results (as expected)

谢谢!

汤姆

1 个答案:

答案 0 :(得分:3)

在定义scope时,scope定义的范围会被评估一次,因此DateTime.now指的是您的应用实例首次启动的时间。

尝试:

scope :is_queued, lambda { where("status = 2 OR (status = 0 AND status_expires > ?)", DateTime.now) }