class NestedAttributesUniquenessValidator
Public Instance Methods
validate_each(record, _attribute, values)
click to toggle source
# File lib/nested_attributes_validator/active_model/validations/nested_attributes_uniqueness_validator.rb, line 4 def validate_each(record, _attribute, values) trg_fields = target_fields # detect duplicated values duplicated_values = target_values(trg_fields, values) .group_by{|_k ,v| v}.values .select{|a| a.size>1} .flatten(1) .to_h .keys # set errors duplicated_values.each do |value| trg_fields.each do |field| # set error to the parent record attribute_name = :"#{attributes.first}.#{options[:display_field] || field}" record.errors[attribute_name] << I18n.t('errors.messages.nested_attributes_not_unique') record.errors[attribute_name].uniq! # also set error to the child record to apply "field_with_errors" value.errors.add(field , nil) end end end