?以前用.net和Oracle常常用到Transation,目的是在进行复杂的数据库逻辑时保证中间某一环节出错后,数据回复原状,不会产生错误数据。
在Rails中也有Transation:
class="ruby">ActiveRecord::Base.transaction do david.withdrawal(100) mary.deposit(100) end
?这代码的目的就是从david的账户扣100,把钱给mary的账户,如果中间raise异常,rails会吧数据库的操作恢复原状,但有个缺点,model的数据不会被恢复,解决这个问题用如下方法:
ActiveRecord::Base.transaction(david, mary) do david.withdrawal(100) mary.deposit(100) end
?把需要回滚的model作为参数传递给transaction就能解决了。