aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel
diff options
context:
space:
mode:
authorJose and Yehuda <wycats@gmail.com>2011-10-15 18:37:12 +0200
committerJose and Yehuda <wycats@gmail.com>2011-10-15 18:40:38 +0200
commit7a28498b55913aa0fd1d3529909ab57eaf64af0e (patch)
treed26461bf010228a22956517e6317e421861d39d1 /activemodel
parent322f47898e80af3fcdc3cb3db35e177d8216a2d2 (diff)
downloadrails-7a28498b55913aa0fd1d3529909ab57eaf64af0e.tar.gz
rails-7a28498b55913aa0fd1d3529909ab57eaf64af0e.tar.bz2
rails-7a28498b55913aa0fd1d3529909ab57eaf64af0e.zip
Fix nil has_one association
Diffstat (limited to 'activemodel')
-rw-r--r--activemodel/lib/active_model/serializer.rb4
-rw-r--r--activemodel/test/cases/serializer_test.rb18
2 files changed, 20 insertions, 2 deletions
diff --git a/activemodel/lib/active_model/serializer.rb b/activemodel/lib/active_model/serializer.rb
index 99a007de31..1d11870bb4 100644
--- a/activemodel/lib/active_model/serializer.rb
+++ b/activemodel/lib/active_model/serializer.rb
@@ -31,11 +31,11 @@ module ActiveModel
class HasOne < Config
def serialize(object, scope)
- serializer.new(object, scope).serializable_hash
+ object && serializer.new(object, scope).serializable_hash
end
def serialize_ids(object, scope)
- object.read_attribute_for_serialization(:id)
+ object && object.read_attribute_for_serialization(:id)
end
end
end
diff --git a/activemodel/test/cases/serializer_test.rb b/activemodel/test/cases/serializer_test.rb
index 168a77838f..165c1d2490 100644
--- a/activemodel/test/cases/serializer_test.rb
+++ b/activemodel/test/cases/serializer_test.rb
@@ -259,4 +259,22 @@ class SerializerTest < ActiveModel::TestCase
]
}, serializer.as_json)
end
+
+ def test_associations_with_nil_association
+ user = User.new
+ blog = Blog.new
+
+ json = BlogSerializer.new(blog, user).as_json
+ assert_equal({
+ :author => nil
+ }, json)
+
+ serializer = Class.new(BlogSerializer) do
+ def serializable_hash
+ attributes.merge(association_ids)
+ end
+ end
+
+ assert_equal({ :author => nil }, serializer.new(blog, user).as_json)
+ end
end