module CollectionErrors::Separate::ClassMethods
Public Instance Methods
separate_errors_on(*args)
click to toggle source
# File lib/collection_errors/separate.rb, line 26 def separate_errors_on(*args) options = {:ignore_marked_for_destruction => false}.merge(args.extract_options!) args.each do |collection_name| method_name = "separate_errors_on_#{collection_name}" define_method method_name do # Remove 'collection_name.xxx' attributes from errors targets = [] errors.each do |attribute, message| targets << attribute if attribute.to_s =~ /^#{collection_name}\./ end targets.each{|k| errors.delete(k) } # Add original errors 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