diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 5e1c69ea..048ef70c 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 a5d514e4..6c7cf7b9 100644 --- a/test/serializer_test.rb +++ b/test/serializer_test.rb @@ -329,6 +329,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 da5097d5..ab963714 100644 --- a/test/test_fakes.rb +++ b/test/test_fakes.rb @@ -154,6 +154,10 @@ class BlogSerializer < ActiveModel::Serializer has_one :author, :serializer => AuthorSerializer end +class BlogWithRootSerializer < BlogSerializer + root true +end + class CustomPostSerializer < ActiveModel::Serializer attributes :title end