Class: NestedAttributesUniquenessValidator
- Inherits:
-
ActiveModel::EachValidator
- Object
- ActiveModel::EachValidator
- NestedAttributesUniquenessValidator
- Includes:
- NestedAttributesValidatorUtil
- Defined in:
- lib/nested_attributes_validator/active_model/validations/nested_attributes_uniqueness_validator.rb
Instance Method Summary collapse
Methods included from NestedAttributesValidatorUtil
#target_fields, #target_values
Instance Method Details
#validate_each(record, _attribute, values) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 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 |