[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