Automatic inclusion of child errors in validation


#1

Here are the pertinent bits of the model classes I’m having an issue
with…

BEGIN CODE

class User < ActiveRecord::Base
has_many :contacts, :order => :position

# This allows me to collect up the individual errors for each 

subclass of
# Contact I use (EmailAddress, PhysicalAddress, PhoneNumber)
def after_validation
contacts.each { |c| c.errors.each { |attr, msg|
errors.add(Inflector.underscore(c.class), msg) } }
end

# One of the virtual attributes for reference
def email_address
    address = contacts.detect { |c| c.is_a?(EmailAddress) }
    address ? address.content : nil
end

# - and its setter method
def email_address=(content, description = nil)
    address = contacts.find(:first, :conditions => ["type = 

‘EmailAddress’ AND content = ?", content])
address.move_to_top and return if address

    address = EmailAddress.new(:description => description, :content 

=> content)
contacts << address
address.save and address.move_to_top unless @new_record
end
end

class Contact < ActiveRecord::Base
acts_as_list :scope => :user_id
belongs_to :user
end

One of the Contact subclasses for reference

class EmailAddress < Contact
validates_format_of :content, :with =>
/^[a-z0-9-_.]+@[a-z0-9-.]+$/
end

END CODE

Ever since switching from the 0.13.x stream to the 0.14.x stream I am
now getting extra errors when (for example) an e-mail address doesn’t
validate. The quickest way to describe this change is that it is now as
though an implicit ‘validate_association :contact’ has been added to my
User class just because an EmailAddress is a subclass of Contact of
which User has many. What has been changed and how can I override it so
that my error messages aren’t full of ‘Contacts is invalid’ rubbish?