Je viens de passer de Rails 5.0.0 à 5.1.1 et j'ai commencé à recevoir une tonne d'avertissements de dépréciation comme celui-ci:
AVERTISSEMENT DE DEPRECATION: Le comportement de
changed_attributes
dans après le rappel sera modifié dans la prochaine version de Rails. La nouvelle valeur de retour reflétera le comportement de l'appel de la méthode après quesave
soit retourné (par exemple, l'opposé de ce qu'elle retourne maintenant). Pour conserver le comportement actuel, utilisez plutôtsaved_changes.transform_values(&:first)
.
et ça:
AVERTISSEMENT DE DEPRECATION: Le comportement de
attribute_changed?
dans après le rappel sera modifié dans la prochaine version de Rails. La nouvelle valeur de retour reflétera le comportement de l'appel de la méthode après quesave
soit retourné (par exemple, l'opposé de ce qu'elle retourne maintenant). Pour conserver le comportement actuel, utilisez plutôtsaved_change_to_attribute?
.
Je n'utilise ces méthodes explicitement nulle part dans mon projet et les avertissements concernent principalement les appels de création et de mise à jour sur mes modèles.
Je crois que cela a quelque chose à voir avec mes validations et les rappels after_update
et after_create
dans lesquels j'utilise des confitions telles que if: { author_id_changed? }
mais je ne sais pas quoi faire avec elles.
Je crois aussi que l'avertissement est lié à this mise à jour massive d'ActiveRecord.
Apprécierait n'importe quelle main que vous pouvez donner avec ceci.
UPD
Cet article aidé beaucoup!
Eh bien, j'ai contourné tout en exécutant bundle update
, en mettant à jour les gems et en suivant cet article et en modifiant les appels attribute_changed?
en rappels after_
(mais pas dans les rappels before_
et validations
) et en passant de attribute_was
à attribute_before_last_save
.
Pour les rappels après, vous pouvez utiliser saved_change_to_attribute?
Pour les rappels avant et les validations, vous pouvez utiliser will_save_change_to_attribute?
J'espère que cette information vous aidera!
Vous pouvez changer author_id_changed?
en saved_change_to_author_id?
J'ai effectué une mise à niveau vers Rails 5.1.6 et j'ai les mêmes avertissements DEPRECATION. Si jamais quelqu'un veut toujours résoudre cet avertissement. Voici les étapes que j'ai prises:
Rechercher dans tout votre*_changed?
Changé ceci:
if name_changed?
...
if user_id_changed?
Si ceci se trouve à l'intérieur des blocs after_*
(after_save, after_commit, after_update, etc.):
if saved_change_to_name?
...
if saved_change_to_user_id?
ET à cela s'il se trouve à l'intérieur des blocs before_*
(before_save, before_commit, before_update, etc.):
if will_save_change_to_name?
...
if will_save_change_to_user_id?
De mon point de vue, c'est une chose assez difficile à changer puisque nous avons l'habitude de attribute_changed?
. Mais le changement est bon. La syntaxe avait également plus de sens maintenant.