我正在尝试定义一个scope
,其中包含所有尚未过期的项目 - 或者根本没有过期日期(nil
)。
这就是我所拥有的,但它不会返回我想要的东西:
scope :active, -> { where(["expires > ? OR expires = ?", Time.now, nil]) }
我是Rails的新手,所以有一些明显我缺失的东西(或者可能是一个明显的语法错误)吗?
答案 0 :(得分:5)
比较NULL
值时,您需要使用特殊语法。试试这样:
scope :active, -> { where("expires > ? OR expires IS NULL", Time.zone.now) }
我还将Time.now
更改为Time.zone.now
,以便它使用您应用的配置时区。