Domanda

Nel mio modello rotaie, ho una proprietà decimale chiamato employer_wcb. Mi piacerebbe se, quando employer_wcb è stato cambiato, un po 'sporca è stata impostata su true. Mi piacerebbe l'override del metodo employer_wcb setter. Un modo per farlo (in particolare mediante metaprogrammazione)?

È stato utile?

Soluzione

Quindi, in realtà, come di Rails v2.1, questo è stato cotto in Rails. Date un'occhiata alla per ActiveRecord :: sporco . In sintesi:

# 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

Altri suggerimenti

Se non si desidera utilizzare ferroviario costruito nel funzionalità po 'sporco (ad esempio si desidera ignorare per altri motivi) non è possibile utilizzare il metodo alias (vedere i miei commenti su ingresso di Steve sopra). È comunque possibile utilizzare le chiamate a super per farla funzionare.

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

Questo funziona bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top