2012-09-03 9 views
19

간단한 질문. 레코드를 저장 한 후 사후 처리를 수행 할 ActiveRecord 모델이 있습니다. 그래서 모델에서 내 Resque 큐에 작업을 스틱 queue_for_processing 메서드가 있습니다. 내 레코드가 성공적으로 유지 된 후에이 작업을 수행하려면 모델에 다음을 작성했습니다.레일 : after_create에서 예외 저장

after_create :queue_for_processing 

매우 간단합니다. 나는 어젯밤에 나의 redis 서버가 다운되고 일이 잘못되었다는 것을 제외하고는 모든 것이 예상대로 작동하고 있다고 생각했습니다. 기록은 여전히 ​​저장 될 것이고 나중에 수동으로 처리 할 수있을 것으로 기대하고 있습니다. 그러나 queue_for_processing 메소드는 예외 (예상되는 동작)를 던지고 레코드 저장을 중지합니다.

after_create의 작동 방식을 잘못 이해하고 있습니까? 아니면 제 이해가 정확하고 펑키 한 일이 일어 났습니까?

감사합니다.

답변

34

예, 콜백은 모두 트랜잭션으로 래핑됩니다. after_save

  • before_save에서 거짓 또는 유사한 콜백
  • 예외 before_save 또는 유사한 콜백
  • 예외 또는 유사한 콜백 (after_create)
:

기본적 다음 롤백 발생할

다음은 롤백을 유발하지 않습니다.

당신은 롤백을 야기하는 예외를 원하지 않는 경우 after_save 또는 유사한 콜백에서 거짓
  • 반환
  • 예외 after_commit

사용 after_commit

+1

신속한 응답을 보내 주셔서 감사합니다. 이것은 또한 도움이되었다 : http://rails-bestpractices.com/posts/695-use-after_commit –

+0

또한, 나를 소개해 주셔서 감사합니다 after_commit. Rails3에서 소개 된 것을 볼 수 있지만 메모를 놓친 것 같습니다. 나는 새로운 것을 배우기를 좋아한다 :-) –

+0

위대한 설명! 간결성을 위해 +1. –