instance method save_collection_association

Ruby on Rails 3.1.12

Since v2.3.18 Private

Available in: v2.3.18 v3.0.20 v3.1.12 v3.2.22.5 v4.0.13 v4.1.16 v4.2.9 v5.2.8.1 v6.0.6 v6.1.7.10 v7.0.10 v7.1.6 v7.2.3 v8.0.4 v8.1.2

Signature

save_collection_association(reflection)

Saves any new associated records, or all loaded autosave associations if :autosave is enabled on the association.

In addition, it destroys all children that were marked for destruction with mark_for_destruction.

This all happens inside a transaction, if the Transactions module is included into ActiveRecord::Base after the AutosaveAssociation module, which it does by default.

Parameters

reflection req
Source
# File activerecord/lib/active_record/autosave_association.rb, line 317
    def save_collection_association(reflection)
      if association = association_instance_get(reflection.name)
        autosave = reflection.options[:autosave]

        if records = associated_records_to_validate_or_save(association, @new_record_before_save, autosave)
          begin
          records.each do |record|
            next if record.destroyed?

            saved = true

            if autosave && record.marked_for_destruction?
              association.proxy.destroy(record)
            elsif autosave != false && (@new_record_before_save || record.new_record?)
              if autosave
                saved = association.insert_record(record, false)
              else
                association.insert_record(record)
              end
            elsif autosave
              saved = record.save(:validate => false)
            end

            raise ActiveRecord::Rollback unless saved
          end
          rescue
            records.each {|x| IdentityMap.remove(x) } if IdentityMap.enabled?
            raise
          end

        end

        # reconstruct the scope now that we know the owner's id
        association.send(:reset_scope) if association.respond_to?(:reset_scope)
      end
    end

Defined in activerecord/lib/active_record/autosave_association.rb line 317 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveRecord::AutosaveAssociation

Type at least 2 characters to search.

↑↓ navigate · open · esc close