class ActiveRecord::Associations::NestedError
def compute_attribute(inner_error)
def compute_attribute(inner_error) association_name = association.reflection.name if association.collection? && index_errors_setting && index "#{association_name}[#{index}].#{inner_error.attribute}".to_sym else "#{association_name}.#{inner_error.attribute}".to_sym end end
def index
def index @index ||= ordered_records&.find_index(inner_error.base) end
def index_errors_setting
def index_errors_setting @index_errors_setting ||= association.options.fetch(:index_errors, ActiveRecord.index_nested_attribute_errors) end
def initialize(association, inner_error)
def initialize(association, inner_error) @base = association.owner @association = association @inner_error = inner_error super(@base, inner_error, { attribute: compute_attribute(inner_error) }) end
def ordered_records
def ordered_records case index_errors_setting when true # default is association order association.target when :nested_attributes_order association.nested_attributes_target end end