tusbasaのブログ

業務や勉強中に調べたことを自分用にメモするブログ

【rails】ActiveRecord::Rollback

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 # 実行されない

参考

qiita.com