vendor/bundle/gems/activerecord-4.0.0/lib/active_record/autosave_association.rb
# Adds validation and save callbacks for the association as specified by
# the +reflection+.
#
# For performance reasons, we don't check whether to validate at runtime.
# However the validation and callback methods are lazy and those methods
# get created when they are invoked for the very first time. However,
# this can change, for instance, when using nested attributes, which is
# called _after_ the association has been defined. Since we don't want
# the callbacks to get defined multiple times, there are guards that
# check if the save or validation methods have already been defined
# before actually defining them.
Adds validation and save callbacks for the association as specified by
the +reflection+.

For performance reasons, we don't check whether to validate at runtime.
However the validation and callback methods are lazy and those methods
get created when they are invoked for the very first time. However,
this can change, for instance, when using nested attributes, which is
called _after_ the association has been defined. Since we don't want
the callbacks to get defined multiple times, there are guards that
check if the save or validation methods have already been defined
before actually defining them.
Adds validation and save callbacks for the association as specified by the + reflection + . For performance reasons we don ' t check whether to validate at runtime . However the validation and callback methods are lazy and those methods get created when they are invoked for the very first time . However this can change for instance when using nested attributes which is called _after_ the association has been defined . Since we don ' t want the callbacks to get defined multiple times there are guards that check if the save or validation methods have already been defined before actually defining them .
def add_autosave_association_callbacks(reflection)
        save_method = :"autosave_associated_records_for_{reflection.name}"
        validation_method = :"validate_associated_records_for_{reflection.name}"
        collection = reflection.collection?
        unless method_defined?(save_method)
          if collection
            before_save :before_save_collection_association
            define_non_cyclic_method(save_method, reflection) { save_collection_association(reflection) }
            after_create save_method
            after_update save_method
          elsif reflection.macro == :has_one
            define_method(save_method) { save_has_one_association(reflection) }
             For example, given that after_creates run before after_saves, if
             we configured instead an after_save there would be no way to fire
             a custom after_create callback after the child association gets
             created.
            after_create save_method
            after_update save_method
          else
            define_non_cyclic_method(save_method, reflection) { save_belongs_to_association(reflection) }
            before_save save_method
          end
        end
        if reflection.validate? && !method_defined?(validation_method)
          method = (collection ? :validate_collection_association : :validate_single_association)
          define_non_cyclic_method(validation_method, reflection) { send(method, reflection) }
          validate validation_method
        end
      end
def add_autosave_association_callbacks ( reflection ) save_method = :" autosave_associated_records_for_ #{ reflection . name } " validation_method = :" validate_associated_records_for_ #{ reflection . name } " collection = reflection . collection? unless method_defined? ( save_method ) if collection before_save :before_save_collection_association define_non_cyclic_method ( save_method , reflection ) { save_collection_association ( reflection ) } after_create save_method after_update save_method elsif reflection . macro == :has_one define_method ( save_method ) { save_has_one_association ( reflection ) } after_create save_method after_update save_method else define_non_cyclic_method ( save_method , reflection ) { save_belongs_to_association ( reflection ) } before_save save_method end end if reflection . validate? && ! method_defined? ( validation_method ) method = ( collection ? :validate_collection_association : :validate_single_association ) define_non_cyclic_method ( validation_method , reflection ) { send ( method , reflection ) } validate validation_method end end
Adds validation and save callbacks for the association as specified by
the +reflection+.
Adds validation and save callbacks for the association as specified by the + reflection + .
# Doesn't use after_save as that would save associations added in after_create/after_update twice # Configures two callbacks instead of a single after_save so that # the model may rely on their execution order relative to its # own callbacks. # # For example, given that after_creates run before after_saves, if # we configured instead an after_save there would be no way to fire # a custom after_create callback after the child association gets # created.
reflection
<not_specific>