RubyOnRails was changed change pour les attributs des models

Dans les models rubyonrails il existe une tripotée de méthodes pour les attributs. Vous pouvez avoir un aperçu de ces méthodes dans le module ActiveRecord::Dirty (https://ar.rubyonrails.org/classes/ActiveRecord/Dirty.html)

Voici la traduction en français de la doc RoR : 

Détecter les changements des attributs non-sauvegardés.

Un nouvel objet instantié est inchangé :


person = Person.find_by_name('uncle bob')
person.changed?       # => false

Changeons le nom :


person.name = 'Bob'
person.changed?       # => true
person.name_changed?  # => true
person.name_was       # => 'uncle bob'
person.name_change    # => ['uncle bob', 'Bob']
person.name = 'Bill'
person.name_change    # => ['uncle bob', 'Bill']

En sauvegardant les changements :


person.save
person.changed?       # => false
person.name_changed?  # => false

En assignant de nouveau l'ancienne valeur l'attribut est inchangé:


person.name = 'Bill'
person.name_changed?  # => false
person.name_change    # => nil

Quels sont les attributs qui ont changé ?


person.name = 'bob'
person.changed        # => ['name']
person.changes        # => { 'name' => ['Bill', 'bob'] }

Avant de modifier sur place :


person.name_will_change!
person.name << 'by'
person.name_change    # => ['uncle bob', 'uncle bobby']

Pratique lors des callbacks (before_save, after_save, before_create, ...) pour faire des logs en base de données ou autres.