0

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

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

看来,如果我从自定义的 Array 类中删除函数 sum ,错误就会消失:

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

为什么会这样?我怎样才能解决这个问题并仍然保留 sum 函数?

4

1 回答 1

1

Rails 已经sum为数组提供了一个功能(实际上是在 Enumerable 模块上,以便可以在其他集合上使用)

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

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

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

于 2012-05-20T17:28:43.650 回答