Чтобы моя программа работала как положено, порядок rescue_from не интуитивно понятен. Мне интересно, почему это происходит или где я ошибаюсь?
Я пробовал это решение для обработки ошибок.
https://medium.com/rails-ember-beyond/error-handling-in-rails-the-modular-way-9afcddd2fe1b#.yvuf06281
Мой обработчик ошибок был таким жекак в github repo
module Error
module ErrorHandler
def self.included(clazz)
clazz.class_eval do
rescue_from ActiveRecord::RecordNotFound do |e|
respond(:record_not_found, 404, e.to_s)
end
rescue_from CustomError do |e|
respond(e.error, e.status, e.message.to_s)
end
rescue_from StandardError do |e|
respond(:standard_error, 500, e.to_s)
end
end
end
Это приводит к тому, что мои ошибки всегда обнаруживаются в блоке StandardError
, пропуская блоки ошибок ActiveRecord::RecordNotFound
и Custom
.
Однако, если я переключаю порядок (StandardError
выше в исполнении), он правильно перехватывает другие типы ошибок.
def self.included(clazz) #includes module as a class method
clazz.class_eval do
rescue_from StandardError do |e|
respond(:standard_error, 500, e.to_s)
end
rescue_from ActiveRecord::RecordNotFound do |e|
respond(:record_not_found, 404, e.to_s)
end
rescue_from CustomError do |e|
respond(e.error, e.status, e.message.to_s)
end
end
end
Почему работает StandardError наверху?