Ricerca…


introduzione

Le transazioni ActiveRecord sono blocchi protettivi in ​​cui la sequenza di query di record attive è permanente solo se tutte possono avere successo come un'unica azione atomica.

Iniziare con le transazioni dei record attivi

Le Transazioni record attive possono essere applicate alle classi del modello e alle istanze del modello, gli oggetti all'interno del blocco della transazione non devono necessariamente essere istanze della stessa classe. Questo perché le transazioni sono per connessione al database, non per modello. Per esempio:

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

L'uso di save with a bang assicura che la transazione venga automaticamente ripristinata quando viene generata l'eccezione e dopo il rollback, il controllo passa al blocco di salvataggio per l'eccezione. Assicurati di salvare le eccezioni generate dal salvataggio! in Transaction Block.

Se non vuoi usare save !, puoi aumentare manualmente raise ActiveRecord::Rollback quando il salvataggio fallisce. Non è necessario gestire questa eccezione. Quindi eseguirà il rollback della transazione e prenderà il controllo sull'istruzione successiva dopo il blocco della transazione.

   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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow