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"] }
This commit is contained in:
parent
c9b514cd3e
commit
3650ca983c
@ -1,3 +1,7 @@
|
||||
* Add method `#merge!` for `ActiveModel::Errors`.
|
||||
|
||||
*Jahfer Husain*
|
||||
|
||||
* Fix regression in numericality validator when comparing Decimal and Float input
|
||||
values with more scale than the schema.
|
||||
|
||||
|
@ -93,6 +93,18 @@ def copy!(other) # :nodoc:
|
||||
@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"]
|
||||
|
@ -375,6 +375,18 @@ def test_no_key
|
||||
assert_equal [:name], person.errors.details.keys
|
||||
end
|
||||
|
||||
test "merge errors" do
|
||||
errors = ActiveModel::Errors.new(Person.new)
|
||||
errors.add(:name, :invalid)
|
||||
|
||||
person = Person.new
|
||||
person.errors.add(:name, :blank)
|
||||
person.errors.merge!(errors)
|
||||
|
||||
assert_equal({ name: ["can't be blank", "is invalid"] }, person.errors.messages)
|
||||
assert_equal({ name: [{ error: :blank }, { error: :invalid }] }, person.errors.details)
|
||||
end
|
||||
|
||||
test "errors are marshalable" do
|
||||
errors = ActiveModel::Errors.new(Person.new)
|
||||
errors.add(:name, :invalid)
|
||||
|
Loading…
Reference in New Issue
Block a user