2016-01-05 5 views
-2

У меня есть атрибут оценки, начиная с 30 баллов и хочу, чтобы вычитал 1 балл по определенным критериям, которые он встречает. Вот как я пишу это в долгом пути:Попытка рефакторинга моего рубинового кода

case 
when user.growth_rate >= 0.1 && user.growth_rate <= 0.11 
user.update(score: 29) if user.score != 29 
when user.growth_rate >= 0.11 && user.growth_rate <= 0.12 
user.update(score: 28) if user.score != 28 
end 

И этот список можно продолжить, Есть ли лучший способ/метод сделать логику, как это?

+1

Решение может быть умножением с округлением до целых чисел, а затем, возможно, вычесть. '(30.0 - (user.growth_rate * 30)). Round' – sschmeck

+2

Что делать, если' user.growth_rate' точно равно '0.11'? Просто пропустите это? – mudasobwa

+0

@mudasobwa Отсутствует знак равенства, я думаю, – sschmeck

ответ

0

Возможно, можно было вычислить score от growth_rate.

score = (30.0 - (user.growth_rate * 10)).floor 
user.update(score: score) if user.score != score 
+1

Математика ошибочна, но процесс правильный. – meagar

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