de instalación mediante un ejemplo sencillo: Tengo 1 mesa (Totals
) que mantiene la suma de la columna de amount
de cada registro de una segunda tabla (Things
).El uso de ActiveRecord, ¿hay una manera de conseguir los viejos valores de un registro durante after_update
Cuando se actualiza un thing.amount
, me gustaría simplemente agregar la diferencia entre el valor anterior y el nuevo valor a total.sum
.
En este momento estoy restando self.amount
durante before_update
y añadiendo self.amount
durante after_update
. Esto pone MUCHA confianza en la actualización exitosa.
Restricción: No quiero simplemente recalcular la suma de todas las transacciones.
Pregunta: En pocas palabras, me gustaría acceder al valor original durante una devolución de llamada after_update
. ¿De qué manera se te ocurrió esto?
Actualización: Voy con la idea de Luke Francl. Durante una devolución de llamada after_update
, usted todavía tiene acceso a los valores self.attr_was
, que es exactamente lo que yo quería. También decidí ir con una implementación after_update
porque quiero mantener este tipo de lógica en el modelo. De esta forma, sin importar cómo decida actualizar las transacciones en el futuro, sabré que actualizo la suma de las transacciones correctamente. Gracias a todos por sus sugerencias de implementación.
Pensé que algo así existía. ¿Puede vincular a la documentación relevante sobre attr_changed? y attr_was? –
Claro, agregué un enlace a la respuesta. –