instance method
save_collection_association
Ruby on Rails 2.3.18
Since v2.3.18 PrivateSignature
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
-
reflectionreq
Source
# File activerecord/lib/active_record/autosave_association.rb, line 309
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)
records.each do |record|
next if record.destroyed?
if autosave && record.marked_for_destruction?
association.destroy(record)
elsif autosave != false && (@new_record_before_save || record.new_record?)
if autosave
saved = association.send(:insert_record, record, false, false)
else
association.send(:insert_record, record)
end
elsif autosave
saved = record.save(false)
end
raise ActiveRecord::Rollback if saved == false
end
end
# reconstruct the SQL queries now that we know the owner's id
association.send(:construct_sql) if association.respond_to?(:construct_sql)
end
end
Defined in activerecord/lib/active_record/autosave_association.rb line 309
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveRecord::AutosaveAssociation