Ruby on rails ROR+;错误为零。空?在运行代码时
我的“Project”表将invoice作为整数属性,这里我将nil对象放在DB中的这个属性中。在评估期间,是否为空?发生。 在HAML扩展中编写的代码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.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
没有等效的方法。