aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrekoten' Marjan <krekoten@gmail.com>2010-11-30 22:48:19 +0800
committerJosé Valim <jose.valim@gmail.com>2010-12-01 00:03:42 +0800
commita9b666b51d28b2e74da630c31327dee7cbe96d37 (patch)
tree5368f8025e154a17c1c91a72273162be359794c4
parent76a15dd0599779f86bda063bb545bba68c6ff17b (diff)
downloadrails-a9b666b51d28b2e74da630c31327dee7cbe96d37.tar.gz
rails-a9b666b51d28b2e74da630c31327dee7cbe96d37.tar.bz2
rails-a9b666b51d28b2e74da630c31327dee7cbe96d37.zip
Fix generation of wrong json string when field has multiple errors
-rw-r--r--activemodel/lib/active_model/errors.rb10
-rw-r--r--activemodel/test/cases/errors_test.rb10
2 files changed, 20 insertions, 0 deletions
diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb
index 99f47f2cbe..01ca540d28 100644
--- a/activemodel/lib/active_model/errors.rb
+++ b/activemodel/lib/active_model/errors.rb
@@ -167,6 +167,16 @@ module ActiveModel
def as_json(options=nil)
self
end
+
+ def encode_json(encoder)
+ errors = []
+ each_pair do |key, value|
+ value = value.first if value.size == 1
+ errors << "#{encoder.encode(key.to_s)}:#{encoder.encode(value, false)}"
+ end
+
+ "{#{errors * ','}}"
+ end
# Adds +message+ to the error messages on +attribute+, which will be returned on a call to
# <tt>on(attribute)</tt> for the same attribute. More than one error can be added to the same
diff --git a/activemodel/test/cases/errors_test.rb b/activemodel/test/cases/errors_test.rb
index 79b45bb298..1958ed112c 100644
--- a/activemodel/test/cases/errors_test.rb
+++ b/activemodel/test/cases/errors_test.rb
@@ -61,5 +61,15 @@ class ErrorsTest < ActiveModel::TestCase
assert_equal ["name can not be blank", "name can not be nil"], person.errors.to_a
end
+
+ test 'to_json should return valid json string' do
+ person = Person.new
+ person.errors.add(:name, "can not be blank")
+ person.errors.add(:name, "can not be nil")
+
+ hash = ActiveSupport::OrderedHash[:name, ["can not be blank", "can not be nil"]]
+
+ assert_equal person.errors.to_json, hash.to_json
+ end
end