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!=任何事都是假的。