Rails帮助模型设计问题

时间:2011-06-02 12:42:24

标签: ruby-on-rails ruby ruby-on-rails-3

当我更新我的konkurrencer时,我遇到了这个问题,调用了do_foobar。问题是konkurrancer没有评级。我得到了ZeroDivisionerror。

解决此类问题的最佳解决方案是什么?

我的模特:

before_update :do_foobar
def do_foobar
  self.rating = (rating_score/ratings)
end

5 个答案:

答案 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_scoreratings来电中发生的任何其他错误

  

另一个季节,另一个原因,爱Ruby:)

答案 3 :(得分:0)

您必须在使用前初始化此值,例如:

def do_foobar
  self.rating |= 1
  self.rating = (rating_score/rating)
end

答案 4 :(得分:0)

怎么样:

rating = rating_score/ratings if ratings != 0