1

非常に単純に思えますが、そうではありません。

私は2つの値を持っています:

t.integer  "quantity"
t.decimal  "unit_price",         :precision => 7, :scale => 2

each (invoice) ループで、数量に unit_price を掛けたい:

invoice.quantity * invoice.unit_price

これにより、次のエラーが発生します。

undefined method `*' for nil:NilClass

最初に値を変換する必要がありますか、それとも些細なことで不足していますか?

ありがとう

4

3 に答える 3

3
invoice.quantity

戻ってきnilます。

エラーメッセージでわかります

undefined method `*' for nil:NilClass

*のインスタンスでメソッドを実行しようとしていますNilClass

例としてこれをチェックしてください

> nil * 5
=> undefined method `*' for nil:NilClass (NoMethodError)
于 2012-10-16T21:33:08.087 に答える
1

移行では、これらの列にデフォルト値を追加します。

t.integer  "quantity", :default => 0
t.decimal  "unit_price",         :precision => 7, :scale => 2, :default => 0

そうすれば、特定のレコードにこれらの値をまだ設定していなくても、このエラーは発生しません。これが、ここでのケースであると私は考えています。

于 2012-10-16T21:38:37.047 に答える
0

それは単にそれinvoice.quantityがゼロであることを意味します。

を実行することで乗算でこれを処理できます。invoice.quantity.to_i * invoice.unit_priceまたは、計算を実行する前にチェックする方が適切な場合があります。

于 2012-10-16T21:34:14.610 に答える