我在更新konkurencer时遇到了这个问题,调用do_foobar。问题是孔库兰彻没有评级。我得到了一个偏离轨道的零分区错误。
解决这类问题的最佳解决方案是什么?
我的型号:
before_update :do_foobar
def do_foobar
self.rating = (rating_score/ratings)
end
self.rating = (ratings == 0) ? nil : rating_score/ratings
或
self.rating = rating_score/ratings rescue nil
如果您总是进行
self.rating = 0 if ratings == 0 else (rating_score/ratings)
一种更简单的方法是当场捕获错误。
rating = rating_score - ratings rescue 0
这将立即捕获ZeroDivisionError
并使0
通过。(不过要小心。它还会捕捉并挽救rating_score
和ratings
调用中发生的任何其他错误)
另一个季节,另一个原因,爱Ruby:)
在使用之前必须初始化此值,例如:
def do_foobar
self.rating |= 1
self.rating = (rating_score/rating)
end
关于:
rating = rating_score/ratings if ratings != 0