수색…


소개

액티브 레코드는 액티브 레코드 쿼리의 시퀀스가 ​​모두 하나의 원 액션으로 성공할 수있는 경우에만 영구적 인 보호 블록입니다.

활성 레코드 트랜잭션 시작하기

액티브 레코드 트랜잭션은 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