Rails:包含日期时间查询的范围

时间:2014-07-24 10:16:56

标签: ruby-on-rails rails-activerecord

我正在尝试定义一个scope,其中包含所有尚未过期的项目 - 或者根本没有过期日期(nil)。

这就是我所拥有的,但它不会返回我想要的东西:

scope :active, -> { where(["expires > ? OR expires = ?", Time.now, nil]) }

我是Rails的新手,所以有一些明显我缺失的东西(或者可能是一个明显的语法错误)吗?

1 个答案:

答案 0 :(得分:5)

比较NULL值时,您需要使用特殊语法。试试这样:

scope :active, -> { where("expires > ? OR expires IS NULL", Time.zone.now) }

我还将Time.now更改为Time.zone.now,以便它使用您应用的配置时区。