existe-t-il un moyen d'obtenir la valeur d'origine d'un attribut ActiveRecord (= la valeur qui a été chargée à partir de la base de données)?
Je veux quelque chose comme ça chez un observateur
before_save object
do_something_with object.original_name
end
La tâche consiste à supprimer l'objet d'une table de hachage (en fait, le déplacer vers une autre clé de la table) lors de la mise à jour.
Ajout de _was
à votre attribut vous donnera la valeur précédente.
ActiveRecord's attributes_before_type_cast
La méthode renvoie un hachage d'attributs avant que la transtypage et la désérialisation ne se produisent.
Ajout de _was
est déconseillé dans 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 source à partir 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
Vous pouvez voir un meilleur exemple ici
Jetez un œil dans la documentation Rails
http://api.rubyonrails.org/classes/ActiveModel/Dirty.html
Model.attribute_was renvoie la valeur précédente: D