전체 휴식 동사가 모든 포괄적 인 단일 트랜잭션 아래에있는 경우입니까? 즉, UPDATE, DELETE 또는 CREATE 작업을 처리하는 중 어느 시점에서나 유효성 검사 또는 콜백 오류가 발생하면 이전 콜백에서 수행 한 모든 데이터베이스 작업도 롤백됩니까? 간단히 말해 콜백이나 유효성 검사에서 오류를 발생시키지 않으면 해당 동사 작업에 대한 데이터베이스에서 전혀 변경 사항이 발생하지 않습니다.(평온한) 레일을 사용할 때 트랜잭션이 시작되는시기
답변
전체 휴식 동사가 하나의 포괄적 인 트랜잭션 아래에있는 경우입니까?
아니 내가 UPDATE의 취급의 어느 지점에서 확인 또는 콜백에서 오류가 발생하는 경우, DELETE 또는 작업을 CREATE
, 내가 이전에 수행 한 수있는 모든 데이터베이스 작업입니다 콜백도 롤백 되었습니까?
번호
어떤 콜백 또는 유효성 검사 확인에 오류를 제기하지 모두에서 변화가 동사의 행동에 대한 데이터베이스에서 발생하지 않도록? 당신은 당신이 명시 적으로 컨트롤러에서 트랜잭션을 생성 할 수 있습니다이 동작을 원하는 경우
번호
는 (다른 사용자에 의해 제공되는 예 참조), 또는 당신의 편안한 행동에 행동을 연결하는 around_filter
를 사용합니다.
일부 메소드 (작성, 삭제)는 즉시 데이터베이스로 이동합니다. 거래는 다음과 같이 액티브에서 파생 된 클래스에 거래 방법을 사용하여 발생합니다. (이 예제에서는 여러 데이터베이스에 대한 단일 데이터베이스의 경우, 당신은 단지 하나의 트랜잭션이 필요합니다.)
Student.transaction do
Course.transaction do
course.enroll(student)
student.units += course.units
end
end
이
그런 다음 롤백 할 수 있습니다 이러한 트랜잭션에서 트랜잭션 내에서 발생한 예외는 롤백 후에 전파됩니다.
이것은 트랜잭션이있는 데이터베이스에 따라 다릅니다.
NB : 저장 및 삭제는 트랜잭션으로 래핑됩니다.
기본적으로 트랜잭션 내에 데이터베이스 코드가 작성되어 있지 않으므로 코드에서이를 수행하도록 지시해야합니다.
def create
Model.transaction do
Model.create!(params[:model])
Model.association.create!(params[:association])
end
rescue ActiveRecord::RecordNotSaved, ActiveRecord::RecordInvalid
flash[:notice] = "That record could not be saved."
render :action => "new"
end
#create! 메소드는 레코드를 저장하려고 시도하고 실패하면 예외를 발생시켜 트랜잭션 블록 내부에서 이미 수행 된 코드를 롤백합니다.
만약 당신이 행동을 구출하지 않으면 당신의 퍼블릭 디렉토리에있는 405.html이있는 경우 리디렉션됩니다.
- 1. Shibboleth 평온한 ap
- 2. iBatis, Spring에서 AspectJ를 사용할 때 트랜잭션이 적용되지 않는다.
- 3. Spring 3을 사용할 때 트랜잭션이 롤백되지 않습니다. @Transactional annotation
- 4. 기기 및 레일을 사용할 때 사용자별로 로케일 설정 3
- 5. 레일을 업데이트 할 때 두 모델의 오류 메시지를 표시합니다.
- 6. 다른 트랜잭션이 실행되는 동안 트랜잭션이 끝납니다.
- 7. 레일을 시작할 때 '초기화되지 않은 상수 ActionPack'
- 8. TransactionScope 사용시 트랜잭션이 중단되었습니다.
- 9. 트랜잭션이 교착 상태가되었습니다.
- 10. 일괄 처리가 끝날 때 커밋 할 수없는 트랜잭션이 감지됩니다. 트랜잭션이 롤백됩니다.
- 11. 레일을 이용한 Cancan 인증
- 12. NServiceBus : MSMQ 트랜잭션이 잘못 되었습니까?
- 13. 레일을 열심히로드하고 있습니까?
- 14. createCriteria에 활성 트랜잭션이 필요합니다.
- 15. MySQL/InnoDB에서 트랜잭션이 롤백되지 않습니다.
- 16. 레일을 사용하여 송장 생성
- 17. 동일한 기계에서 다른 버전의 레일을 사용할 수 있습니까?
- 18. 봄 트랜잭션이 수행되지 않음
- 19. JDO에서의이 트랜잭션이 안전한지 이해하기
- 20. 엔티티 트랜잭션이 작동하지 않습니다.
- 21. NHibernate 트랜잭션이 닫히지 않는다
- 22. Linq2SQL : 트랜잭션이 적용된 SubmitChanges?
- 23. MySQL에서 중첩 트랜잭션이 허용됩니까?
- 24. SQLite 트랜잭션이 적용되지 않습니다.
- 25. 트랜잭션이 롤백되면 CompassGps가 롤백됩니까?
- 26. 루비 온 레일을 사용할 때 세션에 저장된 변수를 반복하는 방법은 무엇입니까?
- 27. 문제 레일을 업그레이드하는 것
- 28. 디버깅 할 때 트랜잭션이 DTC 트랜잭션인지 여부를 확인하십시오.
- 29. 앱내 구매를 다시 구매할 때 트랜잭션이 복원되지 않음 (MKStoreKit 사용)
- 30. MySQL (나를위한 MySQL에서) 트랜잭션이 동시에 실행될 때 어떻게 동작합니까?
그런 거래를 중첩 할 필요가 없습니다. .transaction에 대한 호출은 ActiveRecord :: Base에 전달됩니다. 당신은 문자 그대로 ActiveRecord :: Base.transaction을 두 번 호출하고 있습니다. –
이것은 레일 문서의 예제입니다. –
아! 여러 데이터베이스에 필요하다는 것을 알았습니다. 업데이트 됨. –