Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.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 Can';t在值为零的列上使用where_Ruby On Rails - Fatal编程技术网

Ruby on rails Can';t在值为零的列上使用where

Ruby on rails Can';t在值为零的列上使用where,ruby-on-rails,Ruby On Rails,我有一个文章模型 Article.last.publish => nil Article.last.publish != true => true Article.where("publish != ?", true) => [] 为什么我在那里得到一个空数组?试试文章。where(publish:false)ruby中只有两个falsy值:false和nil 因此,如果您检查的值!nil则输出为true 那么你的第一句话呢 Article.last.publish

我有一个文章模型

Article.last.publish
=> nil
Article.last.publish != true
=> true
Article.where("publish != ?", true)
=> []

为什么我在那里得到一个空数组?

试试
文章。where(publish:false)
ruby中只有两个falsy值:
false
nil

因此,如果您检查
的值!nil
则输出为
true

那么你的第一句话呢

Article.last.publish     # its output is nil
那么你的第二句话呢

Article.last.publish != true  # this is correct , since !nil = true
但是最后一个

Article.where("publish != ?", true)
将转换为查询作为

SELECT `articles`.* FROM `articles` WHERE (publish != 1)
这意味着所有发表价值不真实的文章,这意味着虚假

false不等于零


nil和false是两个不同的falsy值。

这是有道理的,尽管我希望任何不是1的值都会匹配!=true和nil不是1或true。那么我该如何编写这个where条件来匹配false和nil呢?我使用了
change\u列:articles,:publish,:boolean,:default=>false
,现在它工作得很好,感谢您提供的信息。NULL在SQL中是特殊的-NULL=任何东西都是false,但是NULL!=任何事都是假的。