在轨道上乘以小数和整数ruby

时间:2012-10-16 21:30:05

标签: ruby-on-rails ruby

看起来很简单,但没有什么。

我有两个值:

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

我想在每个(发票)循环中将数量乘以unit_price:

invoice.quantity * invoice.unit_price

这会导致以下错误:

undefined method `*' for nil:NilClass

我是否必须首先转换这些值,或者是否有一些我丢失的小事?

由于

3 个答案:

答案 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在乘法中处理此问题,或者在进行计算之前检查它是否更合适。