Returns whether or not the association is valid and applies any errors to
the parent, self, if it wasn’t. Skips any :autosave
enabled records if they’re marked_for_destruction?
or destroyed.
# File activerecord/lib/active_record/autosave_association.rb, line 371
def association_valid?(association, record)
return true if record.destroyed? || (association.options[:autosave] && record.marked_for_destruction?)
context = validation_context if custom_validation_context?
return true if record.valid?(context)
if context || record.changed_for_autosave?
associated_errors = record.errors.objects
else
# If there are existing invalid records in the DB, we should still be able to reference them.
# Unless a record (no matter where in the association chain) is invalid and is being changed.
associated_errors = record.errors.objects.select { |error| error.is_a?(Associations::NestedError) }
end
if association.options[:autosave]
return if equal?(record)
associated_errors.each { |error|
errors.objects.append(
Associations::NestedError.new(association, error)
)
}
elsif associated_errors.any?
errors.add(association.reflection.name)
end
errors.any?
end