看起来很简单,但没有什么。
我有两个值:
t.integer "quantity"
t.decimal "unit_price", :precision => 7, :scale => 2
我想在每个(发票)循环中将数量乘以unit_price:
invoice.quantity * invoice.unit_price
这会导致以下错误:
undefined method `*' for nil:NilClass
我是否必须首先转换这些值,或者是否有一些我丢失的小事?
由于
答案 0 :(得分:3)
invoice.quantity
正在返回nil
。
您可以通过错误消息判断
undefined method `*' for nil:NilClass
您正尝试在*
NilClass
以此为例进行检查
> nil * 5
=> undefined method `*' for nil:NilClass (NoMethodError)
答案 1 :(得分:1)
在迁移中,将默认值添加到这些列中。
t.integer "quantity", :default => 0
t.decimal "unit_price", :precision => 7, :scale => 2, :default => 0
这样,即使你还没有为特定记录设置这些值,你也不会得到这个错误,这就是我怀疑的情况。
答案 2 :(得分:0)
这只意味着invoice.quantity
为零。
您可以通过执行invoice.quantity.to_i * invoice.unit_price
在乘法中处理此问题,或者在进行计算之前检查它是否更合适。