diff options
author | Jahfer Husain <jahfer.husain@shopify.com> | 2017-07-07 13:16:06 -0400 |
---|---|---|
committer | Jahfer Husain <jahfer.husain@shopify.com> | 2017-07-07 14:32:59 -0400 |
commit | 3650ca983c5c2ffd1a2993fa091bf504594325a7 (patch) | |
tree | fa37bcac571b39046e4affd9d81fac7edda68d36 /activemodel/lib | |
parent | c9b514cd3e8fe7d74ae91ecd30db839132e7899c (diff) | |
download | rails-3650ca983c5c2ffd1a2993fa091bf504594325a7.tar.gz rails-3650ca983c5c2ffd1a2993fa091bf504594325a7.tar.bz2 rails-3650ca983c5c2ffd1a2993fa091bf504594325a7.zip |
Add ActiveModel::Errors#merge!
ActiveModel::Errors#merge! allows ActiveModel::Errors to append errors from
a separate ActiveModel::Errors instance onto their own.
Example:
person = Person.new
person.errors.add(:name, :blank)
errors = ActiveModel::Errors.new(Person.new)
errors.add(:name, :invalid)
person.errors.merge!(errors)
puts person.errors.messages
# => { name: ["can't be blank", "is invalid"] }
Diffstat (limited to 'activemodel/lib')
-rw-r--r-- | activemodel/lib/active_model/errors.rb | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb index 942b4fa9bb..76c23df541 100644 --- a/activemodel/lib/active_model/errors.rb +++ b/activemodel/lib/active_model/errors.rb @@ -93,6 +93,18 @@ module ActiveModel @details = other.details.dup end + # Merges the errors from <tt>other</tt>. + # + # other - The ActiveModel::Errors instance. + # + # Examples + # + # person.errors.merge!(other) + def merge!(other) + @messages.merge!(other.messages) { |_, ary1, ary2| ary1 + ary2 } + @details.merge!(other.details) { |_, ary1, ary2| ary1 + ary2 } + end + # Clear the error messages. # # person.errors.full_messages # => ["name cannot be nil"] |