나는 이것을 실험 해왔다. 당신의 구조가 롤백을 일으킨 예외를 잡는다면, 이미 일어난 트랜잭션의 부분이 커밋 된 것처럼 보입니다. 내 경우에는 트랜잭션을 시작하기 전의 상태로 데이터베이스를 롤백하고 싶지만 여전히 예외를 처리하려고합니다.
은 이걸로 끝났다 :
self.transaction do
first_operation
begin
operation_that_might_violate_db_constraint
rescue ActiveRecord::RecordNotUnique
#deal with the error
raise ActiveRecord::Rollback #force a rollback
end
end
raise ActiveRecord::Rollback
부분은 트랜잭션이 완전히 롤백됩니다 확인합니다. 그것이 없다면, first_operation
에서의 변화는 끝날 것입니다.
ActiveRecord :: Rollback은 트랜잭션 수준 위에 버블 링되지 않는 특별한 종류의 예외이므로 오류 페이지를 렌더링하는 캐치되지 않은 예외로 끝나지는 않습니다.
나는이 작업을 수행하는 황금 표준 방법인지는 확실하지 않지만 작동하는 것 같습니다.
이 응답에서 봐 주시기 바랍니다 : http://stackoverflow.com/questions/14329877/render-failing-to-render-correct-template-in-rescue-from- activerecordrollback/35731832 # 35731832 – monteirobrena