Я работаю со сторонним API, и кажется, что он неожиданно возвращает нулевые поля для того, что должно быть числовыми атрибутами.
Мое приложение использует много проверок Model.whatever_attribute во всех своих представлениях, и я внезапно начал получать такие ошибки, как «неопределенный метод `>» для nil: NilClass» и подобные ошибки, где what_attribute равен nil.
У меня есть такой код просмотра, например:
.stat{ :class => ((@obj.value > 1.2 and @obj.vaue > 0) ? 'green-font': 'red-font')}
Что возвращается с вышеупомянутым исключением, если значение = nil.
Теперь я не могу предположить, что значение равно 0, и иметь для этого значение по умолчанию в базе данных, потому что это может быть неправильное значение. Мне нужно было бы проверить, получил ли я нуль из API и, возможно, представил конечному пользователю «Н/Д» или «-».
Конечно, я могу сделать это всеми возможными способами, моей первоначальной мыслью было настроить вспомогательный метод и в значительной степени сделать nil? зарегистрируйтесь там и вернитесь соответственно, но мне интересно.
Есть ли какая-нибудь рубиновая идиома, которую можно использовать для более изящного обращения с такими ситуациями?
Я думаю, что это должен быть метод, основанный на модели.
В app/models
файле model_name.rb
Метод вроде:
def get_font_class
self.value.nil? || self.value < 0 ? "green-font" : "red-font"
end
Вы можете добавить любые чеки, которые хотите
ПРИМЕЧАНИЕ: ||
проверяет первое выражение (self.value.nil?
), а если оно true
не проверяет второе (self.value < 0
)
И в виду используйте этот метод:
class: @model_object.get_font_class
В Rails есть #try, а в Ruby —
&.
, которые оба должны обрабатывать NoMethodError при нулевых значениях.