diff options
author | lulalala <mark@goodlife.tw> | 2019-03-17 10:25:08 +0800 |
---|---|---|
committer | lulalala <mark@goodlife.tw> | 2019-03-31 22:59:13 +0800 |
commit | f7f42a2d0e7154f30d3f1f6cbedf14fc2c3f5b52 (patch) | |
tree | 2403fc8584d793b54c17500743c900b714e45a30 /activemodel | |
parent | 514c4b4d5319f10a275813f1af5a21ed3f41263d (diff) | |
download | rails-f7f42a2d0e7154f30d3f1f6cbedf14fc2c3f5b52.tar.gz rails-f7f42a2d0e7154f30d3f1f6cbedf14fc2c3f5b52.tar.bz2 rails-f7f42a2d0e7154f30d3f1f6cbedf14fc2c3f5b52.zip |
Fix messages[]= does not override value
Diffstat (limited to 'activemodel')
-rw-r--r-- | activemodel/lib/active_model/errors.rb | 1 | ||||
-rw-r--r-- | activemodel/test/cases/errors_test.rb | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb index 81a65a60a7..ac19b4625e 100644 --- a/activemodel/lib/active_model/errors.rb +++ b/activemodel/lib/active_model/errors.rb @@ -631,6 +631,7 @@ module ActiveModel def []=(attribute, value) ActiveSupport::Deprecation.warn("Calling `[]=` to an ActiveModel::Errors is deprecated. Please call `ActiveModel::Errors#add` instead.") + @errors.delete(attribute) Array(value).each do |message| @errors.add(attribute, message) end diff --git a/activemodel/test/cases/errors_test.rb b/activemodel/test/cases/errors_test.rb index 513bd163fc..1e4a6ddc00 100644 --- a/activemodel/test/cases/errors_test.rb +++ b/activemodel/test/cases/errors_test.rb @@ -101,6 +101,14 @@ class ErrorsTest < ActiveModel::TestCase end end + test "[]= overrides values" do + errors = ActiveModel::Errors.new(self) + assert_deprecated { errors.messages[:foo] = "omg" } + assert_deprecated { errors.messages[:foo] = "zomg" } + + assert_equal ["zomg"], errors[:foo] + end + test "values returns an empty array after try to get a message only" do errors = ActiveModel::Errors.new(Person.new) errors.messages[:foo] |