Ваш условный оператор содержит две проверки, которые не могут обе быть истинными:
if !billAmount and !billAmount.to_i.positive?()
In ruby !
означает обратное, т.е. true
возвращает true, а !true
возвращает false.
Ваша первая часть условного выражения гласит: «Если сумма счета не равна нулю» или, проще говоря, «имеет ли значение billAmount nil?», Что, если оно не равно нулю, возвращает false
Вторая часть спрашивает, верно ли !billAmount.to_i.positive?()
. Это то же самое, что писать true.to_i.positive?
или false.to_i.positive?
Я полагаю, вам нужно что-то вроде:
unless billAmount&.to_i&.positive
Это предложение вернет истину только в том случае, если сумма счета вернет ноль , или после преобразования в целое число, возвращает неположительное число.
Синтаксис &
предотвращает выдачу ruby ошибки, если первая часть равна нулю (т.е. неопределенный метод to_i
для nilclass) , вместо этого просто возвращается nil (что оценивается как false)