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"


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow