2012-10-15 3 views
0

나는 트랜잭션 및 예외 처리를 사용하여 즉석에서 일련의 객체를 생성합니다. 지금은 롤백과 모든 것을 예상대로 처리하지만 구조 블록은 내가 지시 한 동작을 렌더링하지 않습니다. 롤스 다시 거래를하고 조치 "확인"을 렌더링 :Rails 3 Raid In Rescue Block

여기서 실패시 예상 무슨 거래

def post_validation 
    ActiveRecord::Base.transaction do 
    begin 
     params[:users].each do |user| 
      #process each user and save here 
     end 
     redirect_to root_path #success 
     rescue ActiveRecord::RecordInvalid 
     # something went wrong, roll back   
     raise ActiveRecord::Rollback 
     flash[:error] = "Please resolve any validation errors and re-submit"   
     render :action => "validation"   
    end 
    end  
end 

을 처리하는 내 코드입니다.

실패시 발생하는 상황 : 트랜잭션을 롤백하고 존재하지 않는 뷰 "post_validation"을 렌더링하려고 시도합니다.

답변

2

내가 제공 한 코드에 몇 가지 문제가있는 것 같습니다. 초보자는 raise ActiveRecord::Rollback 라인을 신경 쓸 필요가 없다. 레일스는 트랜잭션 블록 내부에 예외가 발생했을 때 배후에서이를 수행한다. 또한 트랜잭션 블록은 begin 블록 내부에 있어야했습니다. 결과 코드는 다음과 같습니다.

def post_validation 
    begin  
    ActiveRecord::Base.transaction do 
     #process some new records here 
     redirect_to root_path 
    end 
    rescue ActiveRecord::RecordInvalid 
    # handle the exception here; the entire transaction gets rolled-back   
    flash[:error] = "Please resolve any validation errors and re-submit"   
    render :action => "validation"   
    end 
end