4

예를 들어 크기, 치수, 유형 등과 같은 모든 유효성 검사를 통과 한 이미지가 있지만이를 처리해야하는 경우 알 수없는 이유로 ImageMagick에서 오류가 발생합니다. 어떻게해야합니까? 그걸 처리해? Active Record Validations and Callbacks Guide 가입일유효성 검사 후에 before_save 파일을 처리하는 중에 오류가 발생하면 예외를 발생 시키거나 false를 반환하고 오류를 추가해야합니까?

답변

12

:

임의 전에 콜백 방법 정확히 false 반환하거나 예외, 실행 체인이 정지 도착을 제기하고 ROLLBACK가 발행되면 [...]

따라서 예외 버블을 ActiveRecord에 넣거나 직접 트랩하여 응용 프로그램의 컨텍스트 내에서 의미있는 것으로 변환하고 false을 반환 할 수 있습니다. 이런 일이 적합 할 수 있습니다, 그래서 당신은 before_save 콜백 내에서 오류를 등록 할 수 있습니다 :

before_save :do_magick_things 

private 

def do_magick_things 
    # ImageMagick stuff... 
    true 
rescue ImageMagickError, FatalImageMagickError => e 
    errors.add(:base, 'Some sort of sensible version of e.message') 
    false 
end 

당신은 트래핑과 do_magick_things에서와 ImageMagick이 예외를 (번역 최종 사용자에게 의미가 무엇인가에 ImageMagick이 오류를 번역 할 수있는 경우 아마도 가장 의미가있을 것입니다. 예외를 오류 메시지로 변환하면 호출자는 예외를 원할 경우 save!을 사용하고 그렇지 않은 경우 save을 사용할 수 있습니다.

+0

그래서 before_save에 오류를 추가하는 것은 "anti-pattern"이 아닙니다. 알았어, 고마워. – Zequez

+0

@ Zequez : 안티 패턴이라고 생각하지 않습니다. 단지 'before_save'를 검증에 사용하지 마십시오. –

+0

알지만, 어떤 이유로 인해 오류 객체가 유효성 검사 오류에만 사용되어야한다고 생각합니다. – Zequez

관련 문제