2

我正在尝试在我的Products班级中构建一个相对简单的命名范围。奇怪的是,如果我直接发出查询(a 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)

谢谢!

汤姆

4

1 回答 1

3

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

尝试:

scope :is_queued, lambda { where("status = 2 OR (status = 0 AND status_expires > ?)", DateTime.now) }
于 2012-03-03T14:58:43.620 回答