26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/collection_errors/separate.rb', line 26
def separate_errors_on(*args)
options = {:ignore_marked_for_destruction => false}.merge(args.)
args.each do |collection_name|
method_name = "separate_errors_on_#{collection_name}"
define_method method_name do
targets = []
errors.each do |attribute, message|
targets << attribute if attribute.to_s =~ /^#{collection_name}\./
end
targets.each{|k| errors.delete(k) }
index = 0
send(collection_name).each do |r|
next if options[:ignore_marked_for_destruction] && r.marked_for_destruction?
index += 1
next if r.errors.empty?
r.errors.full_messages.each do |full_message|
errors.add(:base, generate_error_message_for_collection_element(collection_name, index, full_message))
end
end
end
after_validation method_name
end
end
|