문제

RESTFUL 동사 전체가 하나의 모든 거래를 포괄하는 트랜잭션 아래에있는 경우가 있습니까? 즉, 업데이트 처리, 삭제 또는 작업 시점에서 유효성 검사 또는 콜백에서 오류가 발생하면 이전 콜백에서 수행했을 수있는 모든 데이터베이스 작동이 롤백 되나요? 간결하게, 콜백 또는 유효성 검사에서 오류를 올리면 해당 동사 조치에 대한 데이터베이스에서 전혀 변화가 발생하지 않도록합니까?

도움이 되었습니까?

해결책

RESTFUL 동사 전체가 하나의 모든 거래를 포괄하는 트랜잭션 아래에있는 경우가 있습니까?

아니

업데이트 처리의 어느 시점에서든 유효성 검사 또는 콜백에 오류가 발생하면 이전 콜백에서 수행 한 모든 데이터베이스 작동이 롤백 되었습니까?

아니.

콜백 또는 유효성 검사에서 오류를 올리면 해당 동사 작업에 대한 데이터베이스에서 전혀 변경되지 않도록해야합니까?

아니.

이 동작을 원한다면 컨트롤러에서 명시 적으로 트랜잭션을 작성하거나 (다른 사용자가 제공 한 예제 참조) around_filter 모든 편안한 행동에 행동을 첨부합니다.

다른 팁

기본적으로 트랜잭션 내에 작성된 데이터베이스 코드가 없으므로 코드에서이를 수행하도록 지시해야합니다.

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로 리디렉션됩니다.

일부 방법 (생성, 파괴)은 즉시 데이터베이스로 이동합니다. 트랜잭션은 다음과 같이 activerecord에서 파생 된 클래스에서 트랜잭션 방법을 사용하여 발생합니다.

Student.transaction do
  Course.transaction do
    course.enroll(student)
    student.units += course.units
  end
end

(이 예제는 여러 데이터베이스입니다. 단일 데이터베이스의 경우 하나의 트랜잭션 만 있으면됩니다.)

그런 다음 이러한 거래를 롤백 할 수 있으며 거래 내에서 발생하는 예외는 롤백 후 전파됩니다.

이것은 트랜잭션이있는 데이터베이스에 따라 다릅니다.

NB : 저장 및 파괴는 거래에 싸여 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top