shimgo
8/20/2019 - 8:07 AM

Railsトランザクションとロールバック発生時処理

例外をキャッチするパターン

def create
  ActiveRecord::Base.transaction do
    order.update!(amount: 100)
    stock.update!(quantity: 20)
  end
rescue ActiveRecord::RecordInvalid => e
  puts e.record.errors.full_messages
end

自分でロールバックさせるパターン

def create
  ActiveRecord::Base.transaction do
    order.update(amount: 100)
    stock.update(quantity: 20)
    if order.invalid? || stock.invalid?
      puts order.errors.full_messages
      puts sotck.errors.full_messages
      raise ActiveRecord::Rollback 
    end
  end
end