instance method
save_has_one_association
Ruby on Rails edge
Since v2.3.18 Private — implementation detail, not part of the public APISignature
save_has_one_association(reflection)
Saves the associated record if it’s new or :autosave is enabled on the association.
In addition, it will destroy the association if it was 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 501
def save_has_one_association(reflection)
association = association_instance_get(reflection.name)
return unless association && association.loaded?
record = association.load_target
return unless record && !record.destroyed?
autosave = reflection.options[:autosave]
if autosave && record.marked_for_destruction?
record.destroy
elsif autosave != false
return unless (autosave && record.changed_for_autosave?) || record.new_record? || association.reference_changed_for_autosave?(record)
association.synchronize_reference(record)
inverse_association = reflection.inverse_of && record.association(reflection.inverse_of.name)
return if inverse_association && record.autosaving_belongs_to_for?(inverse_association)
saved = record.save(validate: !autosave)
raise ActiveRecord::Rollback if !saved && autosave
saved
end
end
Defined in activerecord/lib/active_record/autosave_association.rb line 501
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveRecord::AutosaveAssociation