2013-10-07 4 views
17

Gibt es eine Möglichkeit, Änderungen am Modell nach after_commit zu verfolgen, wenn ein Datensatz erstellt wird? Ich habe versucht, schmutziges Modul zu verwenden und war in der Lage, Änderungen zu verfolgen, als der Datensatz aktualisiert wurde, aber wenn Datensatz erstellt wird, werden Änderungen nicht aufgezeichnet.Verfolgen von Modelländerungen in after_commit: on =>: Rückruf erstellen

+0

Wie könnte es Änderungen geben, wenn gerade etwas erstellt wird? –

+0

Die Felder, die von Null zu einem gültigen Wert gehen. –

Antwort

45

Sie können die Methode rails changed? nicht verwenden, da sie immer false zurückgibt. Verwenden Sie die Methode previous_changes, um Änderungen nach dem Festschreiben der Transaktion zu verfolgen. Es wird ein Hash mit Attributnamen als Schlüssel zurückgegeben. Sie können dann überprüfen, ob Ihr attribute_name im Hash ist:

after_commit :foo 

def foo 
if previous_changes[attribute_name] 
    #do your task 
end 
end 
+4

danke! Und um zu überprüfen, ob der Hash Ihr Attribut enthält, könnten Sie etwas wie 'if @ item.previous_changes.has_key? (' Attribute_name ') 'tun –

Verwandte Themen