014 rescue_from 활용법
November 20th, 2007
013 Rope 데이터 구조 / 절대 주관적인 루비 뉴스
레일스를 익히는 좋은 예제로 내가 자주 추천하는 Beast를 보면 이런 코드를 볼 수 있다.
- class ApplicationController
- 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 덕분이다. 관련 내용을 블로깅하려고 생각만 하고 있다가 오늘 좋은 글을 발견해서 소개한다.
위 코드는 아래처럼 다시 쓸 수 있다.
- 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




November 8th, 2007 at 11:14 PM (myRuby.net) RoR 구인광고는 정말이지 볼 때마다 기분좋아요. 볼 때마다 직접 지원하고 싶어진다는…
November 8th, 2007 at 11:59 PM (myRuby.net) 액티브 서포트 관련 정보가 쏘옥 마음에 듭니다. 이전에 액티브 서포트를 보라고 외치셨지만 의지박약에 T.T 즐겨찾기 속의 루비스트 목록을 이렇게 틈틈히 공개해 주세요.
November 9th, 2007 at 11:26 AM ikspres// 이제 결단을 ^^;
November 9th, 2007 at 11:27 AM 김성안// 네. 틈틈히 정리되는대로 하나씩 올리고 그럴려구요 :)