diff options
author | Edouard CHIN <edouard.chin@shopify.com> | 2019-07-23 17:58:59 +0200 |
---|---|---|
committer | Edouard CHIN <edouard.chin@shopify.com> | 2019-07-23 17:58:59 +0200 |
commit | ff0204bc7f5b33a04cfe4f053e3f24a65f0faff5 (patch) | |
tree | 980451091d2f5bcda302c84ad4c76a1e1ffe9002 /activemodel/lib | |
parent | 31105c81cc82ae829c382a4eee2c5aa362882dea (diff) | |
download | rails-ff0204bc7f5b33a04cfe4f053e3f24a65f0faff5.tar.gz rails-ff0204bc7f5b33a04cfe4f053e3f24a65f0faff5.tar.bz2 rails-ff0204bc7f5b33a04cfe4f053e3f24a65f0faff5.zip |
Modify behaviour of `AM::Errors#to_h`:
- `AM::Error#to_h` was kind of broken before and would return in the
hash values a single error message.
```ruby
person = Person.new
person.errors.add(:name, "cannot be blank")
person.errors.add(:name, "too long")
puts person.errors.to_h # {name: 'too long'}
```
Since an attribute can have different errors, the previous behavior
didn't make much sense.
Now, `ActiveModel::Errors#to_hash` correctly returns an array of
error messages containing all the errors for an attribute.
However, one can easily be surprised by this change, so let's
deprecated it first.
Diffstat (limited to 'activemodel/lib')
-rw-r--r-- | activemodel/lib/active_model/errors.rb | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb index e7405fb586..480f24183a 100644 --- a/activemodel/lib/active_model/errors.rb +++ b/activemodel/lib/active_model/errors.rb @@ -304,9 +304,13 @@ module ActiveModel end def to_h - deprecation_rename_warning(:to_h, :to_hash) + ActiveSupport::Deprecation.warn(<<~EOM) + ActiveModel::Errors#to_h is deprecated and will be removed in Rails 6.2 + Please use `ActiveModel::Errors.to_hash` instead. The values in the hash + returned by `ActiveModel::Erors.to_hash` is an array of error messages. + EOM - to_hash + to_hash.transform_values { |values| values.last } end def messages |