Ruby on Rails
ActiveRecord-Transaktionen
Suche…
Einführung
ActiveRecord-Transaktionen sind Schutzblöcke, bei denen die Abfolge aktiver Datensatzabfragen nur dann dauerhaft ist, wenn sie alle als eine atomare Aktion erfolgreich sind.
Erste Schritte mit aktiven Datensatztransaktionen
Aktive Datensatztransaktionen können sowohl auf Model-Klassen als auch auf Model-Instanzen angewendet werden. Die Objekte innerhalb des Transaktionsblocks müssen nicht alle Instanzen derselben Klasse sein. Dies liegt daran, dass Transaktionen pro Datenbankverbindung und nicht pro Modell erfolgen. Zum Beispiel:
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
Die Verwendung von save with a bang stellt sicher, dass die Transaktion automatisch zurückgesetzt wird, wenn die Ausnahme ausgelöst wird. Nach dem Zurücksetzen wechselt die Steuerung zum Rettungsblock für die Ausnahme. Stellen Sie sicher, dass Sie die Ausnahmen retten, die aus dem Speicher geworfen wurden! in Transaktionsblock.
Wenn Sie save! Nicht verwenden möchten, können Sie raise ActiveRecord::Rollback
manuell erhöhen raise ActiveRecord::Rollback
wenn das Speichern fehlschlägt. Sie müssen diese Ausnahme nicht behandeln. Anschließend wird die Transaktion rückgängig gemacht, und die Kontrolle wird nach dem Transaktionsblock für die nächste Anweisung übernommen.
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"