À tous ceux qui verront cela plus tard, comme il est actuellement (août 2017) en tête de Google: Il convient de mentionner que ce comportement sera modifié dans Rails 5.2 et qu'il a des avertissements de dépréciation à partir de Rails 5.1, car ActiveModel :: Dirty a un peu changé .
Qu'est-ce que je change?
Si vous utilisez la attribute_changed?
méthode dans les after_*
-callbacks, vous verrez un avertissement comme:
AVERTISSEMENT DE DEPRECATION: Le comportement des attribute_changed?
callbacks inside ou after changera dans la prochaine version de Rails. La nouvelle valeur de retour reflétera le comportement de l'appel de la méthode après son save
retour (par exemple, le contraire de ce qu'elle renvoie maintenant). Pour conserver le comportement actuel, utilisez saved_change_to_attribute?
plutôt. (appelé depuis some_callback à /PATH_TO/app/models/user.rb:15)
Comme il le mentionne, vous pouvez résoudre ce problème facilement en remplaçant la fonction par saved_change_to_attribute?
. Ainsi, par exemple, name_changed?
devient saved_change_to_name?
.
De même, si vous utilisez attribute_change
pour obtenir les valeurs avant-après, cela change également et lance ce qui suit:
AVERTISSEMENT DE DEPRECATION: Le comportement des attribute_change
callbacks inside ou after changera dans la prochaine version de Rails. La nouvelle valeur de retour reflétera le comportement de l'appel de la méthode après son save
retour (par exemple, le contraire de ce qu'elle renvoie maintenant). Pour conserver le comportement actuel, utilisez saved_change_to_attribute
plutôt. (appelé depuis some_callback à /PATH_TO/app/models/user.rb:20)
Encore une fois, comme il le mentionne, la méthode change le nom vers saved_change_to_attribute
lequel retourne ["old", "new"]
. ou use saved_changes
, qui renvoie toutes les modifications, et celles-ci sont accessibles en tant que saved_changes['attribute']
.