2013-08-27 36 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'修好了。谢谢。 –