diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 2dc4366e..449a131e 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -304,7 +304,12 @@ module ActiveModel return false if self._root == false class_name = self.class.name.demodulize.underscore.sub(/_serializer$/, '').to_sym unless self.class.name.blank? - self._root || class_name + + if self._root == true + class_name + else + self._root || class_name + end end def url_options diff --git a/test/serializer_test.rb b/test/serializer_test.rb index b45e270c..72703076 100644 --- a/test/serializer_test.rb +++ b/test/serializer_test.rb @@ -318,6 +318,16 @@ class SerializerTest < ActiveModel::TestCase assert_equal({ :author => nil }, serializer.new(blog, :scope => user).as_json) end + def test_true_root + blog = Blog.new + + assert_equal({ + :blog_with_root => { + :author => nil, + } + }, BlogWithRootSerializer.new(blog).as_json) + end + def test_root_false_on_load_active_model_serializers begin ActiveSupport.on_load(:active_model_serializers) do diff --git a/test/test_fakes.rb b/test/test_fakes.rb index a758f30a..3ce3a9e5 100644 --- a/test/test_fakes.rb +++ b/test/test_fakes.rb @@ -146,6 +146,10 @@ class BlogSerializer < ActiveModel::Serializer has_one :author, :serializer => AuthorSerializer end +class BlogWithRootSerializer < BlogSerializer + root true +end + class CustomPostSerializer < ActiveModel::Serializer attributes :title end