Ruby on rails ROR+;错误为零。空?在运行代码时

Ruby on rails ROR+;错误为零。空?在运行代码时,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,我的“Project”表将invoice作为整数属性,这里我将nil对象放在DB中的这个属性中。在评估期间,是否为空?发生。 在HAML扩展中编写的代码 - @project.each do |proj| =proj.invoice if !proj.invoice.blank? || !proj.invoice.empty? || !proj.invoice.nil? - @project_invoice=proj.invoice =@project_invoice=0 if p

我的“Project”表将invoice作为整数属性,这里我将nil对象放在DB中的这个属性中。在评估期间,是否为空?发生。 在HAML扩展中编写的代码

- @project.each do |proj|
  =proj.invoice if !proj.invoice.blank? || !proj.invoice.empty? || !proj.invoice.nil?
  - @project_invoice=proj.invoice

  =@project_invoice=0 if proj.invoice.blank? || proj.invoice.empty? || proj.invoice.nil
我在运行代码时收到此错误

NoMethodError:当你没有预料到的时候,你有一个nil对象! 您可能期望数组的一个实例。
计算nil.empty时出错?

第二个条件的变量名拼写错误。它应该是proj,而不是projt


这将导致您的问题。

如果发票列为nill,则!项目发票。空白?计算结果为false,下一个测试完成!projt.invoice.empty

既然发票是零,你们有零。空吗?哪个是错误,为空?不能在零上运行

ruby-1.9.2-p0 > !nil.blank? || !nil.empty?
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.empty?

我认为你做得太过分了,因为整数不应该是数组。我认为您应该将它缩短为只测试
空白?
,因为它也会捕获一个空数组。

这就是您正在使用的代码。如果这是相同的代码,我会在 第二行

你能试一下吗

=proj.invoice if !proj.invoice.blank? || !proj.invoice.empty? || !proj.invoice.nil?

Ruby和rails提供了一些标准测试可以提供帮助,但您通常不需要同时使用所有这些测试:

# Rails provided Object#blank? method
nil.blank? # => true
false.blank? # => true
''.blank? # => true
[ ].blank? # => true

# Ruby provided Object#nil? method
nil.nil? # => true
false.nil? # => false
''.nil? # => false
[ ].nil # => false

# Ruby class-specific #empty? method
nil.empty? # => error
false.empty? # => error
''.empty? # => true
[ ].empty? # => true
在您的情况下,您可能正在寻找的测试实际上是一个完全不同的测试。与
blank?
相反的是
present?
,在这种情况下非常方便。您甚至可以将两个反向逻辑测试折叠成一个简单的三元查询:

- @project_invoice = proj.present? ? proj.invoice : 0
更详细地说,它是这样的:

- if (proj.present?)
  @project_invoice = proj.invoice
- else
  @project_invoice = 0

当前方法验证该变量是否表示某种类型的非零、非空值。

否,我检查了同一个问题是否存在。如果proj.invoice为零,您不能检查。空?在上面。也许你的意思是!(proj.invoice.blank?| | proj.invoice.empty?| | | proj.invoice.nil?)逻辑上与相同!项目发票空白?&&!项目发票为空?&!项目发票。无。。。但不必要的空白?处理所有的情况。非常好的一个,这个语句减少了我的代码行。Thanx@tadman..so
empty?
仅为字符串、数组和散列定义。这正确吗?
empty?
是为很多事情定义的,
String
Array
Hash
都是很好的例子,但也有其他例子,因为它是一个常用的定义方法名
nil
没有等效的方法。