错误:无法强制进入Fixnum

zen*_*126 2 ruby model sum ruby-on-rails

我有以下函数来汇总给定用户的模型中:amount字段的所有记录Pack:

user.rb

  def total_money_spent_cents
    amount = self.packs.map(&:amount).sum
    return amount
  end
Run Code Online (Sandbox Code Playgroud)

但是,当我使用此功能时,我收到以下错误:

nil can't be coerced into Fixnum
Run Code Online (Sandbox Code Playgroud)

有什么建议?

编辑 我在测试中仍然遇到关于Fixnum的问题,并在这里打开另一个问题.

amn*_*mnn 9

这表明你的一个包有一个尚未设置的金额字段,所以nil.当你尝试将它添加到其他东西时,它会经历类型强制,看看Ruby是否可以将其类型按到一个可以添加到数字中的类型,但它不能,因此你有这个错误.

一个解决方案是:

def total_amount_spent_cents
  packs.map(&:amount).compact.sum
end
Run Code Online (Sandbox Code Playgroud)

Array#compact删除nil元素.

这可能是修复症状而不是实际问题.情况可能就是你不应该nil在那里,在这种情况下你应该检查你的Pack模型的初始化(或者可能是它的验证,以确保它amount是强制性的).