Provides a way to track changes in your object in the same way as Active Record does.
The requirements for implementing ActiveModel::Dirty are:
include ActiveModel::Dirty in your object.
Call define_attribute_methods passing each method you want to track.
Call attr_name_will_change! before each change to the tracked attribute.
Call changes_applied after the changes are persisted.
Call clear_changes_information when you want to reset the changes information.
Call restore_attributes when you want to restore previous data.
A newly instantiated
The requirements for implementing ActiveModel::Dirty are:
include ActiveModel::Dirty in your object.
Call define_attribute_methods passing each method you want to track.
Call attr_name_will_change! before each change to the tracked attribute.
Call changes_applied after the changes are persisted.
Call clear_changes_information when you want to reset the changes information.
Call restore_attributes when you want to restore previous data.
A newly instantiated
Person
object is unchanged:person = Person.new
person.changed? # => false
Change the name:person.name = 'Bob'
person.changed? # => true
person.name_changed? # => true
person.name_changed?(from: "Uncle Bob", to: "Bob") # => true
person.name_was # => "Uncle Bob"
person.name_change # => ["Uncle Bob", "Bob"]
person.name = 'Bill'
person.name_change # => ["Uncle Bob", "Bill"]
Save the changes:person.save
person.changed? # => false
person.name_changed? # => false
Reset the changes:person.previous_changes # => {"name" => ["Uncle Bob", "Bill"]}
person.reload!
person.previous_changes # => {}
Rollback the changes:person.name = "Uncle Bob"
person.rollback!
person.name # => "Bill"
person.name_changed? # => false
Assigning the same value leaves the attribute unchanged:person.name = 'Bill'
person.name_changed? # => false
person.name_change # => nil
Which attributes have changed?
No comments:
Post a Comment