transactionの中でActiveRecord::Rollback
が発生した場合ロールバックした後で例外は再送されない。戻り値はnil
になる
ActiveRecord::Base.transaction do # BEGIN user1.save! # 実行される(ROLLBACKで戻る) raise ActiveRecord::Rollback # ROLLBACK user2.save! # 実行されない end do_something # 実行される
ActiveRecord::Rollback
以外の例外の場合、raiseが再送されて発生箇所以下のコードは実行されない
ActiveRecord::Base.transaction do # BEGIN user1.save! # 実行される(ROLLBACKで戻る) raise "foo" # ROLLBACK user2.save! # 実行されない end do_something # 実行されない
参考