instance method
save_belongs_to_association
Ruby on Rails 8.1.2
Since v2.3.18 PrivateSignature
save_belongs_to_association(reflection)
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.
Parameters
-
reflectionreq
Source
# File activerecord/lib/active_record/autosave_association.rb, line 536
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 = if record.new_record? || (autosave && record.changed_for_autosave?)
begin
@autosaving_belongs_to_for ||= {}
@autosaving_belongs_to_for[association] = true
record.save(validate: !autosave)
ensure
@autosaving_belongs_to_for[association] = false
end
end
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
Defined in activerecord/lib/active_record/autosave_association.rb line 536
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveRecord::AutosaveAssociation