tutorial software rails ejemplos descargar curso caracteristicas ruby-on-rails

ruby-on-rails - software - ruby on rails tutorial



¿Cómo detectar cambios de atributos desde el modelo? (5)

Deberías mirar el módulo ActiveModel::Dirty : deberías poder realizar las siguientes acciones en tu modelo de Reclamo:

claim.status_changed? # returns true if ''status'' attribute has changed claim.status_was # returns the previous value of ''status'' attribute claim.status_change # => [''old value'', ''new value''] returns the old and # new value for ''status'' attribute claim.name = ''Bob'' claim.changed # => ["name"] claim.changes # => {"name" => ["Bill", "Bob"]}

Oh! las alegrías de Rails!

Me gustaría crear una función de devolución de llamada en los rieles que se ejecuta después de que se guarda un modelo.

Tengo este modelo, reclamo que tiene un atributo ''estado'' que cambia según el estado del reclamo, los posibles valores están pendientes, respaldados, aprobados, rechazados

La base de datos tiene ''estado'' con el valor predeterminado de ''pendiente''.

Me gustaría realizar ciertas tareas después de que el modelo se crea la primera vez o se actualiza de un estado a otro, dependiendo de qué estado cambie.

Mi idea es tener una función en el modelo:

after_save :check_state def check_state # if status changed from nil to pending (created) do this # if status changed from pending to approved performthistask end

Mi pregunta es ¿cómo puedo verificar el valor anterior antes del cambio dentro del modelo?


He visto la pregunta aumentar en muchos lugares, así que escribí un rubí minúsculo para ello, para hacer el código un poco más agradable (y evitar un millón de declaraciones if / else en todas partes): https://github.com/ronna-s/on_change . Espero que eso ayude.


Será mucho mejor utilizar una solución bien probada, como la gema state_machine .


Te recomiendo que eches un vistazo a uno de los complementos de máquina de estado disponibles:

Cualquiera de los dos te permitirá configurar estados y transiciones entre estados. Manera muy útil y fácil de manejar sus requerimientos.


puedes usar esto

self.changed

devuelve una matriz de todas las columnas que cambiaron en este registro

también puedes usar

self.changes

que devuelve un hash de columnas que cambiaron y resultados antes y después como matrices