Ruby on rails ruby on rails上的小数和整数相乘
看起来很简单,但什么都不是 我有两个价值观:Ruby on rails ruby on rails上的小数和整数相乘,ruby-on-rails,ruby,Ruby On Rails,Ruby,看起来很简单,但什么都不是 我有两个价值观: t.integer "quantity" t.decimal "unit_price", :precision => 7, :scale => 2 我想在每个发票循环中将数量乘以单价: invoice.quantity * invoice.unit_price 这会导致以下错误: undefined method `*' for nil:NilClass 我必须先转换这些值,还是缺少一些琐碎的东西 谢谢 返回零
t.integer "quantity"
t.decimal "unit_price", :precision => 7, :scale => 2
我想在每个发票循环中将数量乘以单价:
invoice.quantity * invoice.unit_price
这会导致以下错误:
undefined method `*' for nil:NilClass
我必须先转换这些值,还是缺少一些琐碎的东西
谢谢
返回零
您可以通过错误消息来判断
undefined method `*' for nil:NilClass
您正试图在NilClass的实例上执行方法*
以这个为例
> nil * 5
=> undefined method `*' for nil:NilClass (NoMethodError)
返回零
您可以通过错误消息来判断
undefined method `*' for nil:NilClass
您正试图在NilClass的实例上执行方法*
以这个为例
> nil * 5
=> undefined method `*' for nil:NilClass (NoMethodError)
这只是意味着发票数量为零
您可以通过执行invoice.quantity.to_i*invoice.unit_price来处理乘法运算,或者在进行计算之前检查它可能更合适。这只是意味着invoice.quantity为零
您可以通过执行invoice.quantity.to_i*invoice.unit_price在乘法运算中处理此问题,或者在执行计算之前检查它可能更合适。在迁移过程中,将默认值添加到这些列中
t.integer "quantity", :default => 0
t.decimal "unit_price", :precision => 7, :scale => 2, :default => 0
这样,即使尚未为特定记录设置这些值,也不会出现此错误,我怀疑这里就是这种情况。在迁移过程中,为这些列添加默认值
t.integer "quantity", :default => 0
t.decimal "unit_price", :precision => 7, :scale => 2, :default => 0
这样,即使尚未为特定记录设置这些值,也不会出现此错误,我怀疑这里就是这种情况。当我只输出invoice.quantity时,它会返回一个值?在哪里?在某种意义上?Rails有一种对你隐藏东西的方法。是的,在视图中。也许我应该退一步,首先在控制器中执行计算。Thanks@user1137277:我建议改为在模型上的方法中包装该计算。它返回一行nul,这导致了错误,谢谢当我只输出invoice.quantity时,它自己返回一个值?在哪里?在某种意义上?Rails有一种对你隐藏东西的方法。是的,在视图中。也许我应该退一步,首先在控制器中执行计算。Thanks@user1137277:我建议改为在模型上的方法中包装该计算。它返回一行的nul,这导致了错误,谢谢当我自己只输出invoice.quantity时,它会返回一个值吗?我尝试了你的示例,但得到了以下错误:nil不能强制为fixNum,这表明invoice.unit\u price也是nil。您可以使用invoice.unit_price.to_f,但首先检查nil是值得的。您是对的,这避免了错误,但输出为0,这显然意味着两个值都为零。我不明白的是,当我在视图中单独输出这些值时,它们都返回值当我只输出invoice.quantity时,它本身返回值?我尝试了你的示例,但得到了以下错误:nil不能强制为fixNum,这表明invoice.unit\u price也是nil。您可以使用invoice.unit_price.to_f,但首先检查nil是值得的。您是对的,这避免了错误,但输出为0,这显然意味着两个值都为零。我不明白的是,当我在视图中单独输出这些值时,它们都返回值