タイトル通り、はっきり言って特殊なケースの話。
もっかいはうまくいかない
piyo2 = nil
ActiveRecord::Base.transaction do
piyo1 = Piyo.find_by(id: 1)
piyo1.name = 'hoge'
piyo1.save!
piyo2 = Piyo.find_by(id: 2)
piyo2.name = 'foo'
piyo2.save!
raise ActiveRecord::Rollback
end
piyo2.save! # ログをみるとBEGIN COMMITは発行されているがSQLが発行されてない
piyo2.name # fooのままだが、DBはfooになってない
もっかいfind_by
からやりなおし
piyo2 = nil
ActiveRecord::Base.transaction do
piyo1 = Piyo.find_by(id: 1)
piyo1.name = 'hoge'
piyo1.save!
piyo2 = Piyo.find_by(id: 2)
piyo2.name = 'foo'
piyo2.save!
raise ActiveRecord::Rollback
end
piyo2_retry = Piyo.find_by(id: piyo2.id) # もっかい取り直そう
piyo2_retry.update!(name: piyo2.name)