Frage

In meinem Schienen-Modell habe ich eine Dezimalzahl Eigenschaft namens employer_wcb. Ich würde es gerne, wenn beim employer_wcb geändert wurde, ein schmutziges Bit auf true gesetzt wurde. Ich mag die employer_wcb Setter-Methode außer Kraft zu setzen. Jede Art und Weise zu tun, (insbesondere unter Verwendung von metaprogramming)?

War es hilfreich?

Lösung

So tatsächlich, wie von Rails v2.1 wurde dies in Rails gebacken. Werfen Sie einen Blick auf die Dokumentation für Activerecord :: Schmutzige . Zusammengefasst:

# Create a new Thing model instance;
# Dirty bit should be unset...
t = Thing.new
t.changed?              # => false
t.employer_wcb_changed? # => false

# Now set the attribute and note the dirty bits.
t.employer_wcb = 0.525
t.changed?              # => true
t.employer_wcb_changed? # => true
t.id_changed?           # => false

# The dirty bit goes away when you save changes.
t.save
t.changed?              # => false
t.employer_wcb_changed? # => false

Andere Tipps

Wenn Sie nicht wollen, zu verwenden Schiene ist in Dirty-Bit-Funktionalität gebaut (sagen Sie aus anderen Gründen außer Kraft setzen möchten) Sie nicht Alias-Methode verwenden können (siehe meine Kommentare zu Steves Eintrag oben). Sie können jedoch Anrufe Super verwenden, damit es funktioniert.

  def employer_wcb=(val)
    # Set the dirty bit to true
    dirty = true
    super val
  end

Das funktioniert ganz gut.

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