Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 什么';这些where语句之间的区别是什么?_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 什么';这些where语句之间的区别是什么?

Ruby on rails 什么';这些where语句之间的区别是什么?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我在做什么 Event.where(state:nil)并获得1个结果,但对于Event.where('state=?',nil)则获得0个结果 它们之间有什么区别?where(state:nil)在SQL中计算为where events.state为NULL,而另一个计算为where(state=NULL) 现在,与任何对象相比,NULL返回NULL,除非使用IS运算符。因此,如果要检查它是否为NULL,则使用状态为NULL,如果不是NULL,则状态为notnull state=NULL,返回

我在做什么

Event.where(state:nil)
并获得1个结果,但对于
Event.where('state=?',nil)
则获得0个结果

它们之间有什么区别?

where(state:nil)
在SQL中计算为
where events.state为NULL
,而另一个计算为
where(state=NULL)

现在,与任何对象相比,
NULL
返回
NULL
,除非使用
IS
运算符。因此,如果要检查它是否为
NULL
,则使用
状态为NULL
,如果不是
NULL
,则
状态为notnull

state=NULL
,返回
NULL
,在
WHERE
子句中,它相当于
FALSE
,这就是您得到0记录的原因


events.state为NULL
是正确的NULL比较,因此您得到的输出与DB中的相同。

它们生成不同的sql。当你有这样的问题时,你可以在你的关系中添加一个.to_sql,它会显示生成并发送到数据库的sql

其中(state:nil)生成该值,它检查x是否是一个类似于null的值

... WHERE events.state IS NULL
Event.where('state=?',nil)生成此事件,它检查X是否等于null,这将永远不会为真

... WHERE (state = NULL)

您能为每一个提供sql输出吗
.to_sql
好的,我现在明白了。第一个给出的
状态为NULL
,第二个给出的
状态=NULL
。第一个的等价查询将是
事件。其中('state IS NULL')
<代码>事件。其中('state=?',nil)与
事件不同。其中(state:nil)
@MarcinDoliwa问得好。我喜欢它