method
replace_on_target
v7.1.3.4 -
Show latest stable
- Class:
ActiveRecord::Associations::CollectionAssociation
replace_on_target(record, skip_callbacks, replace:, inversing: false)private
No documentation available.
# File activerecord/lib/active_record/associations/collection_association.rb, line 449
def replace_on_target(record, skip_callbacks, replace,, inversing: false)
if replace && (!record.new_record? || @replaced_or_added_targets.include?(record))
index = @target.index(record)
end
catch(:abort) do
callback(:before_add, record)
end || return unless skip_callbacks
set_inverse_instance(record)
@_was_loaded = true
yield(record) if block_given?
if !index && @replaced_or_added_targets.include?(record)
index = @target.index(record)
end
@replaced_or_added_targets << record if inversing || index || record.new_record?
if index
target[index] = record
elsif @_was_loaded || !loaded?
@association_ids = nil
target << record
end
callback(:after_add, record) unless skip_callbacks
record
ensure
@_was_loaded = nil
end