Ruby on Rails
액티브 레코드 거래
수색…
소개
액티브 레코드는 액티브 레코드 쿼리의 시퀀스가 모두 하나의 원 액션으로 성공할 수있는 경우에만 영구적 인 보호 블록입니다.
활성 레코드 트랜잭션 시작하기
액티브 레코드 트랜잭션은 Model 클래스뿐만 아니라 Model 인스턴스에도 적용될 수 있습니다. 트랜잭션 블록 내의 오브젝트는 모두 동일한 클래스의 인스턴스 일 필요는 없습니다. 이는 트랜잭션이 모델별로가 아니라 데이터베이스 별 연결이기 때문입니다. 예 :
User.transaction do
account.save!
profile.save!
print "All saves success, returning 1"
return 1
end
rescue_from ActiveRecord::RecordInvalid do |exception|
print "Exception thrown, transaction rolledback"
render_error "failure", exception.record.errors.full_messages.to_sentence
end
bang과 함께 save를 사용하면 예외가 발생했을 때 트랜잭션이 자동으로 롤백되고 롤백 후에 제어는 예외에 대한 복구 블록으로 이동합니다. 저장에서 던져진 예외를 구출했는지 확인하십시오! 거래 블록.
save!를 사용하지 않으려면 save 실패시 raise ActiveRecord::Rollback
수동으로 발생시킬 수 있습니다. 이 예외를 처리 할 필요는 없습니다. 그런 다음 트랜잭션을 롤백하고 트랜잭션 블록 후에 제어를 다음 명령문으로 가져옵니다.
User.transaction do
if account.save && profile.save
print "All saves success, returning 1"
return 1
else
raise ActiveRecord::Rollback
end
end
print "Transaction Rolled Back"
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow