每次我在任何模型上调用验证方法时,都会出现以下错误:
NoMethodError: undefined method `zero?' for nil:NilClass
如果我从自定义的Array类中删除函数sum,则错误将消失:
class Array
def sum
inject( nil ) { |sum,x| sum ? sum+x : x }
end
..
为什么会这样? 我该如何解决这个问题并保留sum函数?
答案 0 :(得分:1)
Rails已经为数组提供了sum
函数(实际上在Enumerable模块上,以便它可以在其他集合中使用)
它在两个方面与你的功能不同:
[].sum
默认返回0而不是nil [1,2,3].sum {|x| x * 2}
返回12。如果没有回溯,很难说但是轨道中的某些代码可能依赖于这两种行为中的第一种。删除sum
函数的定义,一切都应该没问题。如果您需要空列表的总和为nil
rails'sum方法将一个空列表返回的内容作为可选参数