3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# File 'lib/nested_attributes_validator/active_model/validations/nested_attributes_uniqueness_validator.rb', line 3
def validate_each(record, attribute, values)
fields = ([options[:fields]] || [:self]).flatten.map(&:to_s)
h = values.inject({}){|ret, v| ret[v] = fields.map{|f| v.send(f)}; ret}
if options[:ignore_nil]
h = h.reject{|k, v| v.all?(&:nil?)}
end
duplicated_values = h.group_by{|k ,v| v}.values.select{|a| a.size>1}.flatten(1).to_h.keys
duplicated_values.each do |value|
fields.each do |field|
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!
value.errors.add(field , nil)
end
end
end
|