Ticket #11394, Adding ActiveRecord::Errors#merge! method

Ticket 11394 adds the merge! method to any ActiveRecord::Errors object. If anyone has time to review the ticket and post their comments on if they like the idea of having this functionality:

http://dev.rubyonrails.org/ticket/11394

Examples:    person.errors.merge address.errors    person.errors.merge address.errors, :only => [ :city, ;state ]    person.errors.merge address.errors, :except => [ :street, :zip ]

Thanks,

Zach Dennis http://www.continuousthinking.com

Those examples should be "merge!" and not "merge"

Zach Dennis http://www.continuousthinking.com

I think the example is too contrived. That particular situation you would/could solve using errors_for 'person', 'address'. A better example would be something that uses delegation.

class ZipCode < ARec::Base   has_many :addresses   validates_presence_of :city, :state, :zip end

class Address < ARec::Base   belongs_to :zip_code   validates_presence_of :street   validates_associated :zip_code

  [:city, :state, :zip].each do |delegated_attribute|     delegate delegated_attribute, "#{delegated_attribute}=", :to=>:zip_code   end

  def initialize(*attrs)     params = attrs.last.is_a?(Hash) ? attrs.last : {}     self.zip_code = params[:zip_code_id].nil? ? ZipCode.new : ZipCode.find(params[:zip_code_id])     super   end end

home = Address.new :street=>'123 Main St', :city=>'Anytown', :state=>'SC' home.valid? #=> false

In this scenario it would be helpful to merge the errors from home and home.zip_code since they appear to be one object to the user.