[Ror-es] Ayuda con callbacks

Jaime Iniesta jaimeiniesta at gmail.com
Tue Mar 25 16:43:53 GMT 2008


Holas, a ver si alguien me puede echar una mano con los callbacks...

Tengo una aplicación con un modelo Producto donde quiero que cada vez
que se modifique, se apunte en un histórico los campos que han
cambiado. En plan: "Precio cambia de 100 € a 125 €, color cambia a
rojo", en un modelo Historico asociado a Producto.

Para ello pensaba hacerlo con callbacks de manera que antes del update
de producto me hiciera una copia temporal del producto, y después del
update comparo qué campos han cambiado y lo anoto en el histórico. Una
cosa así:

class Producto
  has_many :historicos

  before_validation_on_update :apunta_datos
  before_update :apunta_historico

  def apunta_datos
    @producto_bak = self.clone
  end

  def apunta_historico
    cambios = ""
    if self.precio != @producto_bak.precio
      cambios += "Precio cambia de #{@producto_bak.precio} a #{self.precio}"
    end

    if (cambios != "")
      self.historicos.create(:cambios => cambios)
    end
  end
end

Pero esto no funciona porque todos los before_* callbacks tienen lugar
una vez que se ha modificado el objeto, y no antes. O sea que lo que
apunto con self.clone ya es el objeto modificado, con lo que siempre
compara 125 € con 125 €...

¿Cuál es la mejor forma de hacer esto? ¿Mejor desde el controlador?

-- 
Jaime Iniesta
http://jaimeiniesta.com - http://railes.net - http://pagerankalert.com


More information about the Ror-es mailing list