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的问题,并在这里打开另一个问题.
这表明你的一个包有一个尚未设置的金额字段,所以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是强制性的).
| 归档时间: |
|
| 查看次数: |
1154 次 |
| 最近记录: |