Schienen: attribute_changed?

8

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%     
thenengah 31.05.2010, 07:54
quelle

3 Antworten

29

Wenn Sie Änderungen an Ihrem Modell verfolgen möchten, bietet Rails "Dirty Objects" . Z.B. Ihr Modell hat ein name -Attribut:

%Vor%

Wenn Sie den alten Wert in Ihrer Datenbank speichern möchten, können Sie Folgendes verwenden:

  1. das Modellattribut amount
  2. die Methode _was für das obige Attribut mit anderen Worten: 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

    
microspino 31.05.2010, 08:01
quelle
3

Verwenden Sie *_was call, um den alten Wert zu erhalten:

%Vor%     
Harish Shetty 31.05.2010 13:06
quelle
0

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

    
sameera207 31.05.2010 10:58
quelle

Tags und Links