当我更新我的konkurrencer时,我遇到了这个问题,调用了do_foobar。问题是konkurrancer没有评级。我得到了ZeroDivisionerror。
解决此类问题的最佳解决方案是什么?
我的模特:
before_update :do_foobar
def do_foobar
self.rating = (rating_score/ratings)
end
答案 0 :(得分:4)
self.rating = (ratings == 0) ? nil : rating_score/ratings
或
self.rating = rating_score/ratings rescue nil
答案 1 :(得分:1)
如果你总是这样做
self.rating = 0 if ratings == 0 else (rating_score/ratings)
答案 2 :(得分:1)
更简单的方法是当场捕捉错误。
rating = rating_score - ratings rescue 0
这将立即捕获ZeroDivisionError
并通过0
。 (但要小心。它还会抓住并解决rating_score
和ratings
来电中发生的任何其他错误
另一个季节,另一个原因,爱Ruby:)
答案 3 :(得分:0)
您必须在使用前初始化此值,例如:
def do_foobar
self.rating |= 1
self.rating = (rating_score/rating)
end
答案 4 :(得分:0)
怎么样:
rating = rating_score/ratings if ratings != 0