aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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