DirtyAssociations

Monitors changes to has_many and has_and_belongs_to_many associations using ActiveModel::Dirty.

Usage

Include DirtyAssociations concern in your model.

include DirtyAssocations

Call monitor_association_changes method after has_many.

has_many :foos
monitor_association_changes :foos

Check one of the following methods to see if the relation has changed:

  • changes

  • changed

  • previous_changes

  • [singularized_association_name]_ids_changed?

  • [singularized_association_name]_ids_previously_changed?

    bar.foos = [ Foo.find(42) ] # or you can use the foo_ids setter
    bar.changes # { "foo_ids" => [[5], [42]] }
    bar.changed # [ "foo_ids" ]
    bar.foo_ids_changed? # true
    bar.foo_ids_previously_changed? # false
    
    bar.save
    bar.previous_changes # { "foo_ids" => [[5], [42]] }
    bar.foo_ids_changed? # false
    bar.foo_ids_previously_changed? # true