Wann beginnen Transaktionen bei Schienen mit (geruhsamen)
-
02-07-2019 - |
Frage
Ist es der Fall, dass das gesamte erholsame Verb unter einer allumfassenden Transaktion? Das heißt, wenn ich einen Fehler bei der Validierung oder Rückrufen an jedem beliebigen Punkt im Umgang mit einer UPDATE erhöhen, DELETE oder Operation CREATE ist jede Datenbankoperation, die ich auch durchgeführt haben, konnte in früheren Rückrufen zurückzugerollt? Kurz und bündig, macht einen Fehler bei jedem Rückruf oder Validierung Erhöhung macht es so, dass keine Änderung überhaupt tritt in der Datenbank für diese Verbhandlung?
Lösung
Ist es der Fall, dass das gesamte erholsame Verb unter einer allumfassenden Transaktion?
Nein
, wenn ich einen Fehler bei der Validierung oder Rückrufen an jedem beliebigen Punkt im Umgang mit einer UPDATE erhöhen, DELETE oder Operation CREATE ist jede Datenbankoperation, die ich auch in früheren Rückrufen durchgeführt hat, konnte rückgängig gemacht?
Nein.
hat einen Fehler an einem Rückruf oder Validierung erhöht es so machen, dass keine Änderung überhaupt tritt in der Datenbank für diese Verbhandlung?
Nein.
Wenn Sie dieses Verhalten wünschen, können Sie entweder explizit Transaktionen in Ihrem Controller erstellen (siehe die Beispiele von anderen Benutzern zur Verfügung gestellt), oder ein around_filter
verwendet das Verhalten auf all Ihren erholsamen Aktionen zu befestigen.
Andere Tipps
Standardmäßig gibt es keinen Datenbank-Code ist innerhalb einer Transaktion geschrieben, müssen Sie ihm sagen, dass in dem Code zu tun.
def create
Model.transaction do
Model.create!(params[:model])
Model.association.create!(params[:association])
end
rescue ActiveRecord::RecordNotSaved, ActiveRecord::RecordInvalid
flash[:notice] = "That record could not be saved."
render :action => "new"
end
Mit dem #create! Methoden versucht, den Datensatz zu speichern und wenn sie scheitern, werden sie eine Ausnahme, die keinen Code Rollback erhöhen wird dann bereits innerhalb des Transaktionsblock durchgeführt wird.
Wenn Sie nicht die Aktion retten Sie werden umgeleitet wird (glaube ich) ein 405.html in Ihrem öffentlichen Verzeichnis, sofern vorhanden.
Einige Methoden (Erstellen, Löschen) sofort in die Datenbank gehen. Transaktionen auftreten, indem die Transaktionsverfahren auf Klassen von Active wie folgt abgeleitet:
Student.transaction do
Course.transaction do
course.enroll(student)
student.units += course.units
end
end
(Dieses Beispiel ist für mehrere Datenbanken. Für eine einzelne Datenbank, Sie nur eine Transaktion benötigen.)
Sie können dann auf diesen Transaktionen zurück, und Ausnahmen innerhalb der Transaktion geworfen werden nach dem Rollback propagieren.
Dies ist abhängig von der Datenbank mit Transaktionen.
NB:. Speichern und zerstören in Transaktionen gewickelt