diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index 518323ca..fc3159ad 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -83,7 +83,7 @@ module ActiveModel serializer = item.active_model_serializer end - serializable = serializer ? serializer.new(item, @options) : DefaultSerializer.new(item, @options) + serializable = serializer ? serializer.new(item, @options) : DefaultSerializer.new(item, @options.merge(:root => false)) if serializable.respond_to?(:serializable_hash) serializable.serializable_hash diff --git a/test/array_serializer_test.rb b/test/array_serializer_test.rb index d3001ac1..1f261772 100644 --- a/test/array_serializer_test.rb +++ b/test/array_serializer_test.rb @@ -2,6 +2,27 @@ require "test_helper" require "test_fakes" class ArraySerializerTest < ActiveModel::TestCase + + def test_array_items_do_not_have_root + array = [ + BasicActiveModel.new(:name => "First model"), + BasicActiveModel.new(:name => "Second model") + ] + expected = { "root" => [ + { :name => "First model" }, + { :name => "Second model" } + ] } + + default_serializer = array.active_model_serializer.new(array, :root => "root") + each_serializer = array.active_model_serializer.new(array, :root => "root", :each_serializer => BasicSerializer) + + default_json = default_serializer.as_json + each_json = each_serializer.as_json + + assert_equal(expected, default_json) + assert_equal(expected, each_json) + end + # serialize different typed objects def test_array_serializer model = Model.new diff --git a/test/test_fakes.rb b/test/test_fakes.rb index ab963714..dd2039e9 100644 --- a/test/test_fakes.rb +++ b/test/test_fakes.rb @@ -1,3 +1,26 @@ +class BasicActiveModel + include ActiveModel::Serializers::JSON + def initialize(hash = {}) + @attributes = hash + end + + def serializable_hash(*) + @attributes + end + + def method_missing(method) + if @attributes.key? method + @attributes[method] + else + raise NoMethodError + end + end +end + +class BasicSerializer < ActiveModel::Serializer + attributes :name +end + class Model def initialize(hash={}) @attributes = hash