我正在尝试在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)
谢谢!
汤姆
答案 0 :(得分:3)
在定义scope
时,scope
定义的范围会被评估一次,因此DateTime.now
指的是您的应用实例首次启动的时间。
尝试:
scope :is_queued, lambda { where("status = 2 OR (status = 0 AND status_expires > ?)", DateTime.now) }