Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:包含日期时间查询的范围_Ruby On Rails_Rails Activerecord - Fatal编程技术网

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

Ruby on rails Rails:包含日期时间查询的范围,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,我试图定义一个范围,它包括所有尚未过期的项目,或者根本没有过期日期(nil) 这是我所拥有的,但它没有返回我想要的: scope :active, -> { where(["expires > ? OR expires = ?", Time.now, nil]) } 我是Rails新手,所以我是否缺少一些明显的东西(或者可能是一个明显的语法错误)?在比较NULL值时,需要使用特殊的语法。试着这样做: scope :active, -> { where("expires >

我试图定义一个
范围
,它包括所有尚未过期的项目,或者根本没有过期日期(
nil

这是我所拥有的,但它没有返回我想要的:

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

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

在比较
NULL
值时,需要使用特殊的语法。试着这样做:

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

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

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

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

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

是的,
为空
修复了它!谢谢你知道为什么我用的那个坏了吗?我检查了日志,并将其转换为
WHERE(expires>'2014-07-24 10:22:13'或expires=NULL
。因此唯一的区别是讨厌的
。问题是空值被视为“未知值”。因此,将空值与另一个空值进行比较(这就是
=
操作符所做的)产生另一个空值-空值不等于空值。是的,
是空的
修复了它!谢谢..知道我使用的那一个为什么不起作用吗?我检查了日志,它被翻译到
哪里了(expires>'2014-07-24 10:22:13'或expires=NULL
。因此唯一的区别是讨厌的
。问题是NULL值被视为“未知值”。因此,将NULL与另一个NULL进行比较(这是
=
运算符所做的)会产生另一个NULL-NULL不等于NULL。