diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index d52d1bee..16eb7d87 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -100,8 +100,12 @@ module ActiveModel return unless object if polymorphic? + polymorphic_type = object.class.to_s.split('::').last serializer_class = "#{object.class.to_s}Serializer".constantize - serializer_class.new(object, scope).serializable_hash + + serializer_class.new(object, scope).serializable_hash.merge({ + "#{name}_type".to_sym => polymorphic_type + }) else serializer.new(object, scope).serializable_hash end @@ -294,8 +298,6 @@ module ActiveModel hash[association.key] = association.serialize(associated_object, scope) if association.polymorphic? && associated_object - polymorphic_type = associated_object.class.to_s.split('::').last - hash["#{association.name}_type".to_sym] = polymorphic_type end end diff --git a/test/serializer_test.rb b/test/serializer_test.rb index acefbb5c..bb21d533 100644 --- a/test/serializer_test.rb +++ b/test/serializer_test.rb @@ -703,8 +703,8 @@ class SerializerTest < ActiveModel::TestCase serializer = polymorphic_serializer.new(blog, user) assert_equal({ - :writer_type => 'PolymorphicUser', :writer => { + :writer_type => 'PolymorphicUser', :first_name => "Jose", :last_name => "Valim" }