2013-08-27 175 views
0

我有一個功能可以將一些數據保存到同一個mysql數據庫中的多個表中。 在函數內部,ActiveRecord回滾多筆交易

def process_data(dataA, dataB, dataC, dataD) 
# let's say dataA is saved to tableA, dataB to tableB, dataC to tableC, dataD to tableD 
ActiveRecord::Base.transaction do 
    begin 
     tableA.create(:dataA => dataA) 
     tableB.create(:dataB => dataB) 
     tableC.create(:dataC => dataC) 
     tableD.create(:dataD => dataD) # let's say error occurred here 
    rescue 
     ActiveRecord::Rollback 
    end 
end 
end 

如果有一個例外,同時創造新的記錄提交,我想回滾一切(數據A,數據B,DATAC)。

我該如何實現它?

謝謝。

回答

1

提高的ActiveRecord ::你回滾事務塊裏面,如果你需要回滾

def process_data(dataA, dataB, dataC, dataD) 
ActiveRecord::Base.transaction do 
    begin 
     tableA.create(:dataA => dataA) 
     tableB.create(:dataB => dataB) 
     tableC.create(:dataC => dataC) 
     tableD.create(:dataD => dataD) # let's say error occurred here 
    rescue 
     # will rollback on any exception 
     raise ActiveRecord::Rollback 
    end 
end 
end 

看到http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html獲取更多信息。

+0

加'raise'修好了。謝謝。 –