2012-10-15 135 views
0

我使用事務和異常處理來即時創建一系列對象。現在它處理回滾和所有預期的事情,但我的救援塊不會嘗試呈現我告訴它的動作。Rails 3在救援塊中渲染

這裏是我的代碼,處理事務

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行,Rails會在事務塊內引發異常時在後臺執行此操作。另外,事務塊需要位於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