I have a sign-up form that has nested associations/attributes whatever you want to call them.
My Hierarchy is this:
class User < ActiveRecord::Bas
Use after_validation method
def after_validation
# Skip errors that won't be useful to the end user
filtered_errors = self.errors.reject{ |err| %w{ user User }.include?(err.first) }
self.errors.clear
filtered_errors.each { |err| self.errors.add(*err) }
end
EDITED
Note:-
Add the in the following list in your case it's User or user. you can add multiple if you have multiple assosciation separated by space.
%w{ User user }.include?(err.first) #### This piece of code from the above method has logic which reject the errors which won't be useful to the end user
Salil's answer was almost right but he never made it 100%. Here is the correct way to do it:
def after_validation
# Skip errors that won't be useful to the end user
filtered_errors = self.errors.reject{ |err| %{ person }.include?(err.first) }
# recollect the field names and retitlize them
# this was I won't be getting 'user.person.first_name' and instead I'll get
# 'First name'
filtered_errors.collect{ |err|
if err[0] =~ /(.+\.)?(.+)$/
err[0] = $2.titleize
end
err
}
# reset the errors collection and repopulate it with the filtered errors.
self.errors.clear
filtered_errors.each { |err| self.errors.add(*err) }
end