diff --git a/lib/action_controller/serialization.rb b/lib/action_controller/serialization.rb index b0630ee7..b2c605f5 100644 --- a/lib/action_controller/serialization.rb +++ b/lib/action_controller/serialization.rb @@ -71,6 +71,7 @@ module ActionController return unless serializer options[:scope] = serialization_scope unless options.has_key?(:scope) + options[:resource_name] = self.controller_name if resource.respond_to?(:to_ary) serializer.new(resource, options) end diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index 3d06af45..95bd449f 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -16,6 +16,7 @@ module ActiveModel @object = object @root = options[:root] @root = self.class._root if @root.nil? + @root = options[:resource_name] if @root.nil? @meta_key = options[:meta_key] || :meta @meta = options[@meta_key] @each_serializer = options[:each_serializer] diff --git a/test/integration/action_controller/serialization_test.rb b/test/integration/action_controller/serialization_test.rb index d367988e..d89ce9b1 100644 --- a/test/integration/action_controller/serialization_test.rb +++ b/test/integration/action_controller/serialization_test.rb @@ -131,5 +131,21 @@ module ActionController assert_equal '{"hello":"world"}', @response.body end end + + class ArraySerializerTest < ActionController::TestCase + class MyController < ActionController::Base + def render_array + render json: [Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })] + end + end + + tests MyController + + def test_render_array + get :render_array + assert_equal 'application/json', @response.content_type + assert_equal '{"my":[{"name":"Name 1","description":"Description 1"}]}', @response.body + end + end end end