aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel
diff options
context:
space:
mode:
authorlulalala <mark@goodlife.tw>2019-03-17 10:25:08 +0800
committerlulalala <mark@goodlife.tw>2019-03-31 22:59:13 +0800
commitf7f42a2d0e7154f30d3f1f6cbedf14fc2c3f5b52 (patch)
tree2403fc8584d793b54c17500743c900b714e45a30 /activemodel
parent514c4b4d5319f10a275813f1af5a21ed3f41263d (diff)
downloadrails-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.rb1
-rw-r--r--activemodel/test/cases/errors_test.rb8
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]