method
save_belongs_to_association
rails latest stable - Class:
ActiveRecord::AutosaveAssociation
save_belongs_to_association(reflection)private
Saves the associated record if it’s new or :autosave is enabled.
In addition, it will destroy the association if it was marked for destruction.
# File activerecord/lib/active_record/autosave_association.rb, line 502
def save_belongs_to_association(reflection)
association = association_instance_get(reflection.name)
return unless association && association.loaded? && !association.stale_target?
record = association.load_target
if record && !record.destroyed?
autosave = reflection.options[:autosave]
if autosave && record.marked_for_destruction?
foreign_key = Array(reflection.foreign_key)
foreign_key.each { |key| self[key] = nil }
record.destroy
elsif autosave != false
saved = record.save(validate: !autosave) if record.new_record? || (autosave && record.changed_for_autosave?)
if association.updated?
primary_key = Array(compute_primary_key(reflection, record)).map(&:to_s)
foreign_key = Array(reflection.foreign_key)
primary_key_foreign_key_pairs = primary_key.zip(foreign_key)
primary_key_foreign_key_pairs.each do |primary_key, foreign_key|
association_id = record._read_attribute(primary_key)
self[foreign_key] = association_id unless self[foreign_key] == association_id
end
association.loaded!
end
saved if autosave
end
end
end Related methods
- Instance methods
- changed_for_autosave?
- destroyed_by_association
- destroyed_by_association=
- mark_for_destruction
- marked_for_destruction?
- reload
- Private methods
-
_ensure_no_duplicate_errors -
_record_changed? -
around_save_collection_association -
associated_records_to_validate_or_save -
association_foreign_key_changed? -
association_valid? -
compute_primary_key -
custom_validation_context? -
init_internals -
inverse_polymorphic_association_changed? -
nested_records_changed_for_autosave? -
normalize_reflection_attribute -
save_belongs_to_association -
save_collection_association -
save_has_one_association -
validate_collection_association -
validate_single_association