Header

  1. View current page

    딥뿔이 자라나는 노트

Profile_image?t=1225424611&type=big
나를 바꾼 똑똑한 생활 습관, 스프링노트 - 여러분도 지금 시작해보세요!
38

014 rescue_from 활용법

013 Rope 데이터 구조 / 절대 주관적인 루비 뉴스

 

레일스를 익히는 좋은 예제로 내가 자주 추천하는 Beast를 보면 이런 코드를 볼 수 있다.

 

  1. class ApplicationController
  2.     def rescue_action(exception)
          exception.is_a?(ActiveRecord::RecordInvalid) ? render_invalid_record(exception.record) : super
        end

        def render_invalid_record(record)
          render :action => (record.new_record? ? 'new' : 'edit')
        end
    end

 

흔히 볼 수 있는 레일스 코드는 아니어서 한참을 고민했던 기억이 난다. RecordInvalid 예외를 잡아서, 해당 레코드가 비어있으면 새로 만드는 폼을 출력하고 오류가 있어서 저장이 되지 않으면 편집창을 다시 출력하는 코드이다. 대부분의 컨트롤러에서 반복되는 에러 처리 로직을 상위 클래스에서 예외로 처리하는 방식이 꽤 신선했다(그전까지 봐오고 작성했던 레일스 코드는 그렇지 않아서).

 

그래서 스프링노트에서도 예외를 적극 활용하고 있고, 이런 내용을 레일스에서 예외 처리 활용하기 - RescueException 플러그인라는 글에서 소개한 적이 있다.

 

그런데 EdgeRails에서는 좀 더 깔끔하게 예외를 처리할 수 있는데, 바로 Changeset 7597에서 소개된 rescue_from 덕분이다. 관련 내용을 블로깅하려고 생각만 하고 있다가 오늘 좋은 글을 발견해서 소개한다.

 

 

위 코드는 아래처럼 다시 쓸 수 있다.

 

  1. class ApplicationController
      rescue_from ActiveRecord::RecordInvalid do |e|
        render :action => (record.new_record? ? 'new' : 'edit')
      end
    end

 

rescue_action을 재정의할 필요도 없는 깔끔한 코드다.

 

- 2007/11/07 00:44:32

 

 

History

Last edited on 11/20/2007 23:43 by deepblue

Comments (0)

You must log in to leave a comment. Please sign in.