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?