Лучший способ справиться с неожиданными нулями в базе данных

Я работаю со сторонним 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? зарегистрируйтесь там и вернитесь соответственно, но мне интересно.

Есть ли какая-нибудь рубиновая идиома, которую можно использовать для более изящного обращения с такими ситуациями?

В Rails есть #try, а в Ruby — &., которые оба должны обрабатывать NoMethodError при нулевых значениях.

Todd A. Jacobs 21.03.2022 04:17
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
1
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что это должен быть метод, основанный на модели.

В 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

Другие вопросы по теме