Avant les rails 5.1
Ajouter _was
à votre attribut vous donnera la valeur précédente.
Pour rails 5.1+
Copié de la réponse de Lucas Andrade ci - dessous : https://stackoverflow.com/a/50973808/9359123
L'ajout _was
est obsolète dans les rails 5.1, vous devez maintenant ajouter_before_last_save
Quelque chose comme:
before_save object
do_something_with object.name_before_last_save
end
Renverra la valeur du nom avant votre dernière sauvegarde dans la base de données (fonctionne pour enregistrer et créer)
La différence entre _was
et _before_last_save
selon la documentation:
_ était la source de la documentation
def attribute_was(attr)
attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
end
_before_last_save source à partir de la documentation
def attribute_before_last_save(attr_name)
mutations_before_last_save.original_value(attr_name)
end
self.context
:self.context_was
_was
.Pour rails 5.1+
L'ajout
_was
est obsolète dans les rails 5.1, vous devez maintenant ajouter_before_last_save
Quelque chose comme:
Renverra la valeur du nom avant votre dernière sauvegarde dans la base de données (fonctionne pour enregistrer et créer)
La différence entre
_was
et_before_last_save
selon la documentation:_ était la source de la documentation
_before_last_save source à partir de la documentation
Vous pouvez voir un meilleur exemple ici
la source
attribute_was
a été déconseillée au profit deattribute_in_database
, alors queattribute_before_last_save
c'est une méthode complètement nouvelle à partir de la version 5.1 qui n'a pas d'équivalent dans les versions antérieures de Rails. Source: github.com/rails/rails/pull/25337#issuecomment-225166796La
attributes_before_type_cast
méthode d'ActiveRecord renvoie un hachage d'attributs avant que le transtypage et la désérialisation ne se produisent.la source
Jetez un œil à la documentation des rails
http://api.rubyonrails.org/classes/ActiveModel/Dirty.html
Model.attribute_was renvoie la valeur précédente: D
la source