Rails事物Transaction

阅读更多

 以前用.net和Oracle常常用到Transation,目的是在进行复杂的数据库逻辑时保证中间某一环节出错后,数据回复原状,不会产生错误数据。

在Rails中也有Transation:

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就能解决了。

你可能感兴趣的:(ruby,rails,transation)