Ruby on Rails 2.1-예외 처리

실행과 예외는 항상 함께 진행됩니다. 존재하지 않는 파일을 여는 경우이 상황을 적절하게 처리해야합니다. 그렇지 않으면 프로그램이 표준 이하의 품질로 간주됩니다.

예외가 발생하면 프로그램이 중지됩니다. 예외는 프로그램 실행 중에 발생할 수있는 다양한 유형의 오류를 처리하는 데 사용되며 프로그램을 완전히 중지하는 대신 적절한 조치를 취합니다.

Ruby on Rails의 예외 처리는 Ruby의 예외 처리와 유사합니다. 즉, 시작 / 종료 블록에 예외를 발생시킬 수있는 코드를 포함 하고 구조 절을 사용 하여 처리하려는 예외 유형을 Ruby에 알립니다.

통사론

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

에서 모든 시작구조가 보호됩니다. 이 코드 블록을 실행하는 동안 예외가 발생하면 제어가 rescueend 사이의 블록으로 전달됩니다 .

begin 블록 의 각 구조 절에 대해 Ruby는 발생한 Exception을 각 매개 변수와 차례로 비교합니다. 구조 절에 명명 된 예외가 현재 throw 된 예외의 유형과 동일하거나 해당 예외의 수퍼 클래스 인 경우 일치가 성공합니다.

오류를 어디에 기록합니까?

예외가 발생하면 세 가지 옵션이 있습니다.

  • 내부 로그 파일 (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

보기 또는 레이아웃 (.html.erb)에 @flash의 모든 메시지를 표시하려면 다음을 추가 할 수 있습니다.

<% @flash[:notice] -%>
<div id="notice"><%= @flash[:notice] %></div>
<% end -%>