Railsでトランザクション処理を実装する場合、その機能をActiveRecordが用意してくれています。 transaction do ..... end を使用すればOKなのです。
- def hoge
- User.transaction do
- user1 = User.new
- user1.save! # save!メソッドは保存できない場合、例外ActiveRecord::RecordInvalidが発生
- user2 = User.new
- user2.save!
- end
- #例外が発生しなかった場合の処理
- render :text = "成功"
- rescue => e
- #例外が発生した場合の処理
- render :text = "失敗"
- end
自動でロールバックしてくれます。