Sök…


Introduktion

ActiveRecord-transaktioner är skyddande block där sekvensen med aktiva postfrågor endast är permanent om de alla kan lyckas som en atomaktivitet.

Komma igång med aktiva posttransaktioner

Aktiva posttransaktioner kan tillämpas på modellklasser såväl som modellinstanser, objekten inom transaktionsblocket behöver inte alla vara instanser av samma klass. Detta beror på att transaktioner är per databasanslutning, inte per modell. Till exempel:

User.transaction do
  account.save!
  profile.save!
  print "All saves success, returning 1"
  return 1
end
rescue_from ActiveRecord::RecordInvalid do |exception|
  print "Exception thrown, transaction rolledback"
  render_error "failure", exception.record.errors.full_messages.to_sentence
end

Genom att använda spara med en lugg säkerställs att transaktionen automatiskt rullas tillbaka när undantaget kastas och efter rollbacken går kontrollen till undsättningsblocket. Se till att du räddar undantagen som kastas från rädda! i transaktionsblock.

Om du inte vill använda spara! raise ActiveRecord::Rollback du manuellt höja raise ActiveRecord::Rollback när sparingen misslyckas. Du behöver inte hantera detta undantag. Den kommer sedan att återföra transaktionen och ta kontrollen till nästa uttalande efter transaktionsblocket.

   User.transaction do
      if account.save && profile.save
        print "All saves success, returning 1"
        return 1
      else
        raise ActiveRecord::Rollback
      end
    end
    print "Transaction Rolled Back"


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow