Para cualquiera que vea esto más adelante, ya que actualmente (agosto de 2017) encabeza Google: Vale la pena mencionar que este comportamiento se alterará en Rails 5.2 y tiene advertencias de desaprobación a partir de Rails 5.1, ya que ActiveModel :: Dirty cambió un poco .
Que cambio?
Si está utilizando el attribute_changed?
método en after_*
-callbacks, verá una advertencia como:
ADVERTENCIA DE DEPRECACIÓN: El comportamiento del attribute_changed?
interior de las devoluciones de llamada posteriores cambiará en la próxima versión de Rails. El nuevo valor de retorno reflejará el comportamiento de llamar al método después de save
devolverlo (por ejemplo, lo contrario de lo que devuelve ahora). Para mantener el comportamiento actual, use saved_change_to_attribute?
en su lugar. (llamado desde some_callback en /PATH_TO/app/models/user.rb:15)
Como se menciona, puede solucionar esto fácilmente reemplazando la función con saved_change_to_attribute?
. Entonces, por ejemplo, se name_changed?
convierte saved_change_to_name?
.
Del mismo modo, si está utilizando el attribute_change
para obtener los valores de antes y después, esto también cambia y arroja lo siguiente:
ADVERTENCIA DE DEPRECACIÓN: El comportamiento del attribute_change
interior de las devoluciones de llamada posteriores cambiará en la próxima versión de Rails. El nuevo valor de retorno reflejará el comportamiento de llamar al método después de save
devolverlo (por ejemplo, lo contrario de lo que devuelve ahora). Para mantener el comportamiento actual, use saved_change_to_attribute
en su lugar. (llamado desde some_callback en /PATH_TO/app/models/user.rb:20)
Nuevamente, como se menciona, el método cambia el nombre al saved_change_to_attribute
que regresa ["old", "new"]
. o use saved_changes
, que devuelve todos los cambios, y se puede acceder a ellos como saved_changes['attribute']
.