1

看起来很简单,但什么都不是。

我有两个价值观:

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

我想在每个(发票)循环中将数量乘以 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 回答