欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Rails事物Transaction

程序员文章站 2022-07-15 12:52:11
...

 以前用.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就能解决了。