2015-04-06 7 views
6

Ich versuche, den alten Wert in before_save durch Hinzufügen von "_was" zu meinem Wert, aber es scheint nicht zu funktionieren.Rails - Get alten Wert in before_save

Hier ist mein Code:

before_save :get_old_title 

def get_old_title 
    puts "old value #{self.title_was} => #{self.title}" 
    end 

Beide "title_was" und "Titel" bekam den neuen Titel gerade gespeichert.

Ist es möglich, den alten Wert innerhalb before_save zu erhalten?

+0

Versuchen Sie, einen alten Wert zu erhalten, bevor Sie dieselben Zeilendaten aktualisieren? – sansarp

+0

Ja, sagen wir, mein alter Wert war "Batman" und änderte es in "Superman", ich möchte "Batman" – user2037696

+1

anstelle von before_save verwenden before_update – sansarp

Antwort

5

Anstelle von before_savebefore_update verwenden. Es sollte jetzt funktionieren.

+0

Warum nicht mit 'before_save' gearbeitet? –

+1

before_save wird zum Zeitpunkt der Objekterstellung (nur einmal) aufgerufen und before_update ruft jedes Mal auf, wenn das Objekt aktualisiert wird. –

+0

ja, @SachinR du hast Recht. – sansarp

0

So könnte die obige Antwort funktionieren, aber was, wenn ich den vorherigen Wert aus irgendeinem Grund erhalten und es verwenden wollte, um eine Aufgabe auszuführen, dann müssten Sie den vorherigen Wert abrufen. In meinem Fall habe ich diese

after_update do 
    if self.quantity_changed? 
    sku.decrement(:remaining, (self.quantity_was - self.quantity) * sku.quantity) 
    end 
end 

Die _was und _changed? hinzugefügt zu jeder der Spalten würde die Arbeit tun, um die Arbeit zu erledigen.

1

Der Grund dafür, dass Sie denselben Wert erhalten, liegt wahrscheinlich daran, dass Sie die Ausgabe beim Erstellen des Datensatzes überprüfen. Der Callback before_save wird sowohl an create() als auch an update() aufgerufen, aber unter create() haben sowohl title als auch title_was den gleichen Anfangswert. Die Antwort ist also "Ja, Sie können den alten Wert innerhalb before_save bekommen", aber Sie müssen daran denken, dass es nur dann vom aktuellen Wert abweichen wird, wenn der Datensatz tatsächlich geändert wurde. Dies bedeutet, dass die Ergebnisse, die Sie erhalten, korrekt sind, da die Änderung in der Frage nicht auftritt, wenn der Datensatz erstellt wird.

Verwandte Themen