Ruby on Rails
Transazioni ActiveRecord
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"