Ich habe ein Modell, das ein amount
hat, und ich tracke, um zu sehen, ob dieser Betrag mit einem Model.amount_changed?
mit einem before_save
geändert wird, was gut funktioniert, aber wenn ich amount_was
und% co_de sehe % Es gibt nur den aktualisierten Betrag und nicht den vorherigen Betrag zurück. Und all das passiert, bevor es gerettet ist. Es weiß, wann das Attribut geändert wird, aber es gibt den alten Wert nicht zurück.
Ideen?
%Vor% Wenn Sie Änderungen an Ihrem Modell verfolgen möchten, bietet Rails "Dirty Objects" .
Z.B. Ihr Modell hat ein name
-Attribut:
Wenn Sie den alten Wert in Ihrer Datenbank speichern möchten, können Sie Folgendes verwenden:
amount
amount_was
, die den Wert von Menge vor der Änderung abruft. Sie können beide während des update_attributes
-Aufrufs speichern.
Andernfalls, wenn Sie den amount_was
Verlauf nicht benötigen, können Sie einfach zwei Instanzvariablen verwenden.
Wenn Sie etwas mehr brauchen, wie zum Beispiel das Verfolgen Ihrer Modellhistorie, hat Rails ein nettes dediziertes Plugin. Wie für andere nette Themen sprechen Ryan Bates über I hier: Railscasts # 177
Verwenden Sie *_was
call, um den alten Wert zu erhalten:
Sie können in Ihrem Modul ein anderes vertikales Attribut erstellen
attr_accessor: initial_amount
Wenn Sie Daten aus der Datenbank laden, füllen Sie die Anzahl der Initialen mit Betrag
dann können Sie
überprüfen(initial_amount == Menge? wahr: falsch)
Prost, sameera
Tags und Links ruby-on-rails