Pregunta

En mi modelo de rieles, tengo una propiedad llamada decimal employer_wcb. Me gustaría que, cuando se cambió employer_wcb, un poco sucio se establece en true. Me gustaría reemplazar el método employer_wcb colocador. Cualquier forma de hacerlo (en particular, el uso de metaprogramming)?

¿Fue útil?

Solución

Así que en realidad, a partir de rieles v2.1, esto ha sido horneados en los rieles. Echar un vistazo a la de ActiveRecord :: Dirty . En resumen:

# 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

Otros consejos

Si no desea utilizar de ferrocarril construido en la funcionalidad poco sucio (digamos desea reemplazar por otras razones) no se puede utilizar el método de alias (ver mis comentarios sobre la entrada de Steve arriba). Sin embargo, puede utilizar las llamadas a súper para hacer que funcione.

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

Esto funciona muy bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top