: O. Yuanying

ActiveRecord で rollback

Rails 2.0.2 から、ActiveRecord のトランザクション中にマニュアルでrollbackできるようになったらしい。

2.0.2 より前

transaction中に例外を発生させることで明示的にrollbackしていたが、、


  begin
    transaction do
      david.withdrawal(100)
      mary.deposit(100)
      raise                             # rollback !! 
    end
  rescue
    # 後始末。
  end

raiseした例外はrescueしなくちゃいけなかった。

2.0.2 以降


    transaction do
      david.withdrawal(100)
      mary.deposit(100)
      raise ActiveRecord::Rollback # rolls back the transaction that was otherwise going to be successful
    end

raise ActiveRecord::Rollback で明示的にロールバックされて、トランザクションが静かに終了する。

参考