actualización en callback

4 views
Skip to first unread message

Angel Mauricio Pino Gonzalez

unread,
Jul 7, 2016, 11:20:24 PM7/7/16
to rub...@googlegroups.com
Fue un problema, pero ya lo soluciones, es por si a alguien le resulta útil.

Ruby 2.2.5
Rails 4.2.6
Active_Admin y muchas otras gemas.

Tema actualizar documentos dependientes en un callback

OJO solo pondré los campos que son importantes para lo que quiero aclarar.

Orden de venta
OV_detalle
   Tiene campos: Producto_id, cantidad, entregado, facturado

Guias Despacho
GD Detalle
     Tiene campos: OV_detalle_id y cantidad

Facturas
F_detalle
     Tiene campos:  Guia_Despacho

modelo F_Detalle tiene un callback
     afte_create y actualiza campos de OV_Detalle tomando la relación desde GD_detalle, desde Guia_Despacho desde F_detalle.

Funciono hasta que ocurrió que la misma OV_detalle estaba en GD_detalle diferentes, ocurría que la ultima actualización pisaba las demás como si las anteriores no existieran.

Como estaba al principio

      gd = self.guia_despacho
      gd.guia_despacho_detalles.each do |gdd|
        vod = gdd.venta_orden_detalle_id
        vod.update_attribute(:facturado, vod.facturado + gdd.cantidad)
      end


Despues de arreglarlo

      gd = self.guia_despacho
      gd.guia_despacho_detalles.each do |gdd|
        vod = VentaOrdenDetalle.find( gdd.venta_orden_detalle_id)
        vod.update_attribute(:facturado, vod.facturado + gdd.cantidad)
      end


Puede que así presentado resulte obvio, pero para mi no lo fue, pensé en los commit, etc. Simplemente era que no traía los datos frescos de la BD, si no que usa los que están en memoria. Por lo que si se actualizaba una "vod" dos veces y partía en cero con digamos 7 y 8, solo guardaba 8. No traía el que guardo con 7 en la primera pasada. Para así terminar con 15.


Espero a alguien le sea útil.

Debo agregar que los solucione gracias a usar TDD y muchos datos de prueba y muchas muchas pruebas. Mirar logs, etc.

Porfa no hablen de modelos y otras cosas que no viene al caso trate de simplificar lo más posible el ejemplo.
--
Angel Mauricio Pino G
AngelMauricio...@gmail.com
movil 96-436 63 48

Reply all
Reply to author
Forward
0 new messages