以下は、レール 3.1.6 を使用して mysql 5.5 で実行するコードです。
Model.transaction do
model.events.destroy_all
2.times { model.events.create!(some_body) }
end
モデルの下には、常に 2 つだけのイベント オブジェクトが存在することが期待されます。
このコードを 2 つのスレッドで実行すると、最終的に 4 つのイベント オブジェクトが生成されることがよくあります。両方のスレッドがトランザクション ブロック内のコードの実行をシリアル化することを期待していました。どうやらトランザクションはそのようには機能しません。
この種のことを行う一般的なパターンはありますか?