2011-06-02 4 views
0

У меня возникает эта проблема, когда я обновляю свой konkurrencer, вызываемый do_foobar. Проблема в том, что у konkurrancer нет рейтингов. И я получаю от нуля ZeroDivisionerror.Проблема с дизайном модели Rails

Какое оптимальное решение для решения этой проблемы?

Моя модель:

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

ответ

4
self.rating = (ratings == 0) ? nil : rating_score/ratings 

или

self.rating = rating_score/ratings rescue nil 
1

если вы всегда делаете

self.rating = 0 if ratings == 0 else (rating_score/ratings)

0

Вы должны инициализировать это значение перед использованием, например, как это:

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

Это даже не то, что его вопрос говорит, что его рейтинг превышает «рейтинги», а не «рейтинг». –

+0

Существует опечатка it.rating = (rating_score/ratings) –

+0

Да, моя ошибка, не могла видеть эту небольшую разницу. – megas

0

насчет:

rating = rating_score/ratings if ratings != 0 
1

Более простой способ будет поймать ошибку на месте.

rating = rating_score - ratings rescue 0 

Это мгновенно поймать ZeroDivisionError и пройти через 0. (Будьте осторожны. Он также будет поймать и спасти любую другую ошибку происходит внутри ваших rating_score и ratings вызовов)

Другой сезон, еще одна причина, чтобы любить Руби :)

Смежные вопросы