0

モデルで検証メソッドを呼び出すたびに、次のエラーが発生します。

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

カスタマイズした配列クラスから関数の合計を削除すると、エラーがなくなるようです。

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

なぜこうなった?これを修正し、sum関数を保持するにはどうすればよいですか?

4

1 に答える 1

1

Railsはすでにsum配列の関数を提供しています(実際にはEnumerableモジュール上にあるため、他のコレクションで使用できます)

これは、2つの点で関数とは異なります。

  • [].sumデフォルトではnilではなく0を返します
  • ブロックを受け入れます。つまり、[1,2,3].sum {|x| x * 2}12を返します。

バックトレースなしで判断するのは難しいですが、おそらく、レール内の一部のコードは、これら2つの動作の最初のものに依存しています。関数の定義を削除するsumと、すべて問題ないはずです。空のリストnilの合計をrailsにする必要がある場合、sumメソッドは、オプションの引数として、空のリストに対して何を返すかを取ります。

于 2012-05-20T17:28:43.650 に答える