diff --git a/lib/active_model/serializer/associations.rb b/lib/active_model/serializer/associations.rb index 13678ade..e05f2a33 100644 --- a/lib/active_model/serializer/associations.rb +++ b/lib/active_model/serializer/associations.rb @@ -39,7 +39,8 @@ module ActiveModel end def target_serializer - option(:serializer) + serializer = option(:serializer) + serializer.is_a?(String) ? serializer.constantize : serializer end def source_serializer diff --git a/test/association_test.rb b/test/association_test.rb index 349a374c..b56b124c 100644 --- a/test/association_test.rb +++ b/test/association_test.rb @@ -392,4 +392,26 @@ class AssociationTest < ActiveModel::TestCase }, json) end end + + class StringSerializerOption < AssociationTest + class StringSerializer < ActiveModel::Serializer + attributes :id, :body + end + + def test_specifying_serializer_class_as_string + @post_serializer_class.class_eval do + has_many :comments, :embed => :objects + end + + include_bare! :comments, :serializer => "AssociationTest::StringSerializerOption::StringSerializer" + + assert_equal({ + :comments => [ + { :id => 1, :body => "ZOMG A COMMENT" } + ] + }, @hash) + + assert_equal({}, @root_hash) + end + end end