子ブロックで例外が発生した後、ネストされたトランザクションで ActiveRecord ロールバックが変更されないのはなぜですか?
以下に例を示します。
1.
>> Client.transaction do
?> Client.create(:name => 'Pavel')
>> Client.transaction do
?> Client.create(:name => 'Elena')
>> raise ActiveRecord::Rollback
>> end
>> end
=> nil
>> Client.all.map(&:name)
=> ["Pavel", "Elena"] # instead of []
2.
>> Client.transaction do
?> Client.create(:name => 'Pavel')
>> Client.transaction(:requires_new => true) do
?> Client.create(:name => 'Elena')
>> raise ActiveRecord::Rollback
>> end
>> end
=> nil
>> Client.all.map(&:name)
=> ["Pavel", "Elena"] # instead of ["Pavel"]
ありがとう。
Debian GNU/Linux 5.0.6;
ルビー 1.9.2;
Ruby on Rails 3.0.1;
SQLite 3.7.3。