验证错误 - 未定义的方法`零?'

时间:2012-05-20 17:10:47

标签: ruby-on-rails ruby-on-rails-3

每次我在任何模型上调用验证方法时,都会出现以下错误:

NoMethodError: undefined method `zero?' for nil:NilClass

如果我从自定义的Array类中删除函数sum,则错误将消失:

class Array
  def sum
    inject( nil ) { |sum,x| sum ? sum+x : x }
  end
..

为什么会这样? 我该如何解决这个问题并保留sum函数?

1 个答案:

答案 0 :(得分:1)

Rails已经为数组提供了sum函数(实际上在Enumerable模块上,以便它可以在其他集合中使用)

它在两个方面与你的功能不同:

  • [].sum默认返回0而不是nil
  • 它接受一个块,即[1,2,3].sum {|x| x * 2}返回12。

如果没有回溯,很难说但是轨道中的某些代码可能依赖于这两种行为中的第一种。删除sum函数的定义,一切都应该没问题。如果您需要空列表的总和为nil rails'sum方法将一个空列表返回的内容作为可选参数