Есть ли лучший способ определения пользовательских типов ошибок в библиотеке Ruby (gem) или приложении Ruby on Rails? В частности:
- Где они принадлежат структурно в проекте? Отдельный файл, выделенный соответствующим определением модуля / класса, где-нибудь еще?
- Существует ли какое - либо соглашение , которые устанавливают , когда к и когда не создать новый тип ошибки?
В разных библиотеках разные способы работы, и я не заметил никаких реальных шаблонов. Некоторые библиотеки всегда используют пользовательские типы ошибок, в то время как другие не используют их вообще; у некоторых есть все ошибки, расширяющие StandardError, в то время как у других есть вложенные иерархии; некоторые - просто пустые определения классов, другие имеют все виды умных уловок.
Да, и просто потому, что я чувствую, что называть эти «типы ошибок», довольно двусмысленно, я имею в виду следующее:
class AuthenticationError < StandardError; end
class InvalidUsername < AuthenticationError; end
источник
httparty
: github.com/jnunemaker/httparty/blob/…Exceptions
модуль?/lib
это не место для ошибок. Они очень специфичны для приложений, и у меня сложилось впечатление, что код, который я вставляю,/lib
должен быть кодом, который можно использовать в других приложениях.Unable to autoload constant Exceptions, expected /app/lib/exceptions.rb to define it
другой вариант - один класс на исключение, я думаюЯ думаю, что для того, чтобы иметь согласованные исходные файлы в вашем проекте, вы должны определить ошибки в классе, в которые они могут быть брошены, и нигде больше.
Некоторая иерархия может быть полезной - пространства имен хороши для того, чтобы исключить избыточные строки из имен типов - но это скорее дело вкуса - не нужно зацикливаться, если в вашем приложении есть хотя бы один пользовательский тип исключения, который вы используете повсеместно для дифференциации между «преднамеренным» и «случайным» исключением.
источник
в рельсах вы можете сделать
app/errors
каталогперезапустите Spring / сервер, и он должен забрать его
источник
raise FooError, "Example message..."
илиraise FooError.new("Example message...")
Это старый вопрос, но я хотел поделиться тем, как я обрабатываю пользовательские ошибки в Rails, включая прикрепление сообщений об ошибках, тестирование и как справляться с этим с помощью
ActiveRecord
моделей.Создание пользовательской ошибки
Тестирование (минитест)
С ActiveRecord
Я думаю, что стоит отметить, что если вы работаете с
ActiveRecord
моделью, популярным шаблоном является добавление в модель ошибки, как описано ниже, так что ваши проверки не пройдут:Когда проверки выполняются, этот метод будет добавлен в
ActiveRecord::RecordInvalid
класс ошибок ActiveRecord и приведет к сбою проверок.Надеюсь это поможет!
источник
Чтобы гарантировать, что автозагрузка работает в Rails 4.1.10 должным образом для нескольких пользовательских классов ошибок, вы должны указать отдельные файлы для каждого. Это должно работать в процессе разработки с его динамической перезагрузкой.
Вот как я устанавливаю ошибки в недавнем проекте:
В
lib/app_name/error/base.rb
и в последующих пользовательских ошибках, как в
lib/app_name/error/bad_stuff.rb
После этого вы сможете вызвать ваши ошибки через:
источник
lib/app_name/error.rb
uninitialized constant MyController::AppName
. Я