Учебники

Ruby on Rails 2.1 — обработка исключений

Исполнение и исключение всегда идут вместе. Если вы открываете файл, который не существует, вам нужно правильно обработать эту ситуацию, или ваша программа считается некачественной.

Программа останавливается, если возникает исключение. Исключения используются для обработки ошибок различного типа, которые могут возникнуть во время выполнения программы, и предпринять соответствующие действия вместо полной остановки программы.

Обработка исключений в Ruby on Rails аналогична обработке исключений в Ruby. Это означает, что мы заключаем код, который может вызвать исключение, в блок начала / конца и используем выражения спасения, чтобы сообщить Ruby типы исключений, которые мы хотим обработать.

Синтаксис

begin  
   # -  
      rescue OneTypeOfException  
   # -  
      rescue AnotherTypeOfException  
   # -  
   else  
      # Other exceptions
      ensure
   # Always will be executed
end

Все от начала до спасения защищено. Если во время выполнения этого блока кода возникает исключение, управление передается в блок между спасением и завершением .

Для каждого пункта спасения в блоке начала Ruby сравнивает возбужденное исключение с каждым из параметров по очереди. Сопоставление будет успешным, если исключение, указанное в предложении восстановления, совпадает с типом текущего выданного исключения или является суперклассом этого исключения.

Где регистрировать ошибки?

У вас есть три варианта, когда выдается исключение —

  • Вход во внутренний файл журнала (logger.error)

  • Отобразить соответствующее сообщение пользователю

  • Повторно отобразите исходную страницу, чтобы продолжить

Вход во внутренний файл журнала (logger.error)

Отобразить соответствующее сообщение пользователю

Повторно отобразите исходную страницу, чтобы продолжить

Сообщение об ошибке приложению передается в структуру, называемую флэш-памятью . Флэш-память — это хеш-корзина, в которой содержится ваше сообщение до следующего запроса, после чего оно автоматически удаляется. Вы можете получить к нему доступ с помощью переменной @flash. Ниже приведена простейшая форма использования модуля регистратора для регистрации сообщений об ошибках во внутреннем файле.

begin
.........
rescue Exception => exc
   logger.error("Message for the log file #{exc.message}")
   flash[:notice] = "Store error message"
   redirect_to(:action => 'index')
end

Чтобы отобразить все сообщения от @flash в вашем представлении или макете (.html.erb), вы можете добавить следующее: