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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top