Friday 10 April 2015

Active Model Dirty

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 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:

Salesforce CRM vs. Zoho: A Comparative Analysis

Introduction: Selecting the right customer relationship management (CRM) software is crucial for businesses seeking to streamline their sal...