值为空(0或nil)的Rails中的sql查询

值为空(0或nil)的Rails中的sql查询,sql,ruby-on-rails,Sql,Ruby On Rails,在Rails中有方法item.property.blank?这对于属性为“0”或nil或空白是正确的 如何进行sql查询以检查值是否为空 我现在有: Item.where("name = 'Testname' AND property <> '1'") 这样所有属性为“0”且属性为零的项目都包含在搜索结果中 Item.where("property IN ('0','') OR property IS NULL") 或者更确切地说 Item.where("name = 'Test

在Rails中有方法item.property.blank?这对于属性为“0”或nil或空白是正确的

如何进行sql查询以检查值是否为空

我现在有:

Item.where("name = 'Testname' AND property <> '1'")
这样所有属性为“0”且属性为零的项目都包含在搜索结果中

Item.where("property IN ('0','') OR property IS NULL")
或者更确切地说

Item.where("name = 'Testname' AND (property IN ('0','') OR property IS NULL)")

不使用SQL字符串,您可以执行以下操作:

Item.where(名称:'Testname',属性:[nil,'0','')
它将生成SQL查询

从`items`中选择`items`.*`
其中`items`.`name`='Testname'
和('0',''中的'items`.'property`或'items`.'property`为空)

什么是零?这是一些特定于ruby的东西?你是说
NULL
?啊,是的,这可能是ruby的东西(我只用ruby编写代码)。Nil是数据库中任何完全不存在的条目(尚未定义任何值),因此实际上什么都没有。例如,“0”不是零,因为0已经是一个值了……谢谢,这几乎就是解决方案,只是一个小改动:Item。如果我没有弄错的话,查询中的where(“name=”Testname“和(property IN('0',“”)或property is NULL)”通常没有那么有效。正确的处理方法是确保数据库中的值可以为NULL或不为NULL,两者之间没有其他值。Rails的问题是(或至少过去是)空值是这样存储的,而不是将它们转换为nil值。这可以通过strip_属性gem解决。
Item.where("name = 'Testname' AND (property IN ('0','') OR property IS NULL)")