如何在Rails中修复ActionView :: Template :: Error(Infinity)?

时间:2014-05-15 18:38:09

标签: ruby-on-rails ruby

我注意到我的生产应用程序日志中出现了一个奇怪的错误:

ActionView::Template::Error (Infinity): /path/to/page/with/problem
/myapp/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.0.20/lib/active_support/core_ext/float/rounding.rb:16:in `round'
/myapp/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.0.20/lib/active_support/core_ext/float/rounding.rb:16:in `round'
/myapp/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.0.20/lib/active_support/core_ext/float/rounding.rb:14:in `round'
/myapp/current/path/to/file/with/problem.rb:106:in `my_buggy_method'

在代码中有这样的东西:

def my_buggy_method
  (number1 - number2).round(2)
end

我没有任何关于触发此错误的数字的见解。如何重构我的代码以避免此错误?

更新:我设法在生产中启动Rails控制台并跟踪上述方法中使用的值:

number1 == Infinity
number2 == 0

更新:经过进一步调查,由于除以零,number1返回Infinity

number1 == 113 / 0.0

现在我知道Infinity来自何处,我会添加一张支票,以确保我永远不会被零除。

1 个答案:

答案 0 :(得分:2)

此错误的原因是尝试round或显示Infinity。我没想到这个号码,所以我添加了额外的检查,以确保我不会通过除以零来创建Infinity