不能在具有nil值的列上使用where

时间:2013-05-08 08:17:15

标签: ruby-on-rails

我有文章模型

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

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

2 个答案:

答案 0 :(得分:0)

尝试Article.where(publish: false)

答案 1 :(得分:0)

ruby​​中只有2个虚假值:falsenil

因此,如果您检查!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)

表示发布值不为true的所有文章,表示错误

和false不等于nil。

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