LoginSignup
0
0

More than 5 years have passed since last update.

ロールバックしたオブジェクトをもっかいsaveしようとした話

Last updated at Posted at 2016-06-22

タイトル通り、はっきり言って特殊なケースの話。

もっかいはうまくいかない

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)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0