Ruby on rails 关于ruby语言特有的nil、、“”之间差异的愚蠢查询

Ruby on rails 关于ruby语言特有的nil、、“”之间差异的愚蠢查询,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,谁能告诉我什么时候使用nil、、。我想匹配未在rails/ruby中填充的数据库列。所以我不知道该配哪一个 如果var==nil或如果var==''或如果var==。我一直在尝试点击和试用,但现在我想澄清一下。它们是三种不同的价值观 nil是一个不表示任何内容的值,它是NilClass的唯一值。除了少数例外,nil应该用来表示NULL或value missing之类的东西;这就是它在ActiveRecord NULLnil中的映射方式 是空字符串,因此.size==0。数据库中的非空文本列可能返

谁能告诉我什么时候使用nil、、。我想匹配未在rails/ruby中填充的数据库列。所以我不知道该配哪一个

如果var==nil或如果var==''或如果var==。我一直在尝试点击和试用,但现在我想澄清一下。

它们是三种不同的价值观

nil是一个不表示任何内容的值,它是NilClass的唯一值。除了少数例外,nil应该用来表示NULL或value missing之类的东西;这就是它在ActiveRecord NULLnil中的映射方式

是空字符串,因此.size==0。数据库中的非空文本列可能返回空字符串;非NULL列不应映射为nil,因为它不能表示NULL值

“”是包含单个空格的字符串。它实际上并不比“foo”更特别,因为它只是一个表示某些数据的字符串;数据恰好完全是空白

正如Phlip所暗示的,Rails/As添加的方法可用于同时测试所有这些情况

x.blank?  # true if x is: false, nil, '', '    '

然而,IMOHO,从数据库结果集中消除nil或差异的代码已经被破坏,数据/模型应该是可疑的。空能力和多重性是关系数据库中的巨大概念。

它可能取决于数据在数据库中的存储方式。数据库中的空值很可能由ruby nil表示。根据模式的不同,这些值可能由空字符串表示。虽然可以将数据库文本字段的默认值设置为,但这是不寻常的。因此,简而言之,您应该测试的值取决于数据库模式。

也许,尝试使用blank?方法任何没有价值的东西都是空白的。 零有价值吗?当然,它不是:

nil.blank? => true
空字符串,比如=>没有提供任何有用的值,对吗?它们也是空白的:

"  ".blank? => true
p、 美国:空白?是一个“active_support”扩展,如果您在纯ruby中需要它,请将其作为一个模块包括在内:

require 'rubygems'
require 'active_support/core_ext/object/blank'

数据库NULL通常映射到Ruby nil,反之亦然。但是,如果所讨论的db列不允许空值,则必须检查默认值是否为空。而“”为空的是什么?return?所以..在数据库中,如果列不存在…它应该映射到NilClass,对吗?@Phlip-它是由RoR添加的,不是标准的Ruby。在任何情况下,搜索特定问题通常都会得到结果。零和零的主要区别是什么?Nil主要用于数据库。。需要一些吗clarification@RahulInsane不,这可能是个例外,但取决于实际使用的操作。如果数据库列存在,但有空值,则通常会映射为nil。