diff --git a/lib/active_model/serializer/association/has_one.rb b/lib/active_model/serializer/association/has_one.rb index 38c8b9bc..a8d0651a 100644 --- a/lib/active_model/serializer/association/has_one.rb +++ b/lib/active_model/serializer/association/has_one.rb @@ -12,7 +12,7 @@ module ActiveModel end def serializer_class(object, options = {}) - serializer_from_options || serializer_from_object(object, options) || default_serializer + (serializer_from_options unless object.nil?) || serializer_from_object(object, options) || default_serializer end def build_serializer(object, options = {}) diff --git a/test/fixtures/poro.rb b/test/fixtures/poro.rb index 26c8c7d0..5bdc00e8 100644 --- a/test/fixtures/poro.rb +++ b/test/fixtures/poro.rb @@ -88,7 +88,7 @@ class UserSerializer < ActiveModel::Serializer end class UserInfoSerializer < ActiveModel::Serializer - has_one :user + has_one :user, serializer: UserSerializer end class ProfileSerializer < ActiveModel::Serializer diff --git a/test/unit/active_model/serializer/has_one_test.rb b/test/unit/active_model/serializer/has_one_test.rb index 9f7e393c..366bcd1f 100644 --- a/test/unit/active_model/serializer/has_one_test.rb +++ b/test/unit/active_model/serializer/has_one_test.rb @@ -176,6 +176,20 @@ module ActiveModel }, @user_serializer.as_json) end + def test_associations_embedding_objects_with_nil_values + user_info = UserInfo.new + user_info.instance_eval do + def user + nil + end + end + user_info_serializer = UserInfoSerializer.new(user_info) + + assert_equal({ + 'user_info' => { user: nil } + }, user_info_serializer.as_json) + end + def test_associations_embedding_ids_using_embed_namespace @association.embed_namespace = :links @association.embed = :ids