`ActiveRecord::Rollback` を使う場合は注意が必要。
```ruby
User.transaction do
User.create(name: 'foo')
User.transaction do
User.create(name: 'bar')
raise ActiveRecord::Rollback
end
end
```
このケースだと、`foo` も `bar` も作成される。
```ruby
User.transaction do
User.create(name: 'foo')
User.transaction(requires_new: true) do
User.create(name: 'bar')
raise ActiveRecord::Rollback
end
end
```
`requires_new: true` をつけると、`foo` のみ作成される。
```ruby
User.transaction do
User.create!(name: 'foo')
User.transaction do
# バリデーションの上限よりも長い名前
User.create!(name: 'longer_than_limit')
end
end
```
`ActiveRecord::Rollback` 以外は `rescue` されないため、このケースは `ActiveRecord::RecordInvalid` が発生し、`foo` のみ作成される。
📝 これ本当か?
参考: <https://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html#module-ActiveRecord::Transactions::ClassMethods-label-Nested+transactions>