web-dev-qa-db-fra.com

Avertissement de dépréciation de Rails 5.1.1 modified_attributes

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 que save soit retourné (par exemple, l'opposé de ce qu'elle retourne maintenant). Pour conserver le comportement actuel, utilisez plutôt saved_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 que save soit retourné (par exemple, l'opposé de ce qu'elle retourne maintenant). Pour conserver le comportement actuel, utilisez plutôt saved_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!

7
Almaron

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.

10
Almaron

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!

4
deepak

Vous pouvez changer author_id_changed? en saved_change_to_author_id?

2
akaspick

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.

1
Tophs Celestial