diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index 083a1def..6a56262e 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -7,7 +7,8 @@ module ActiveModel def serializable_array @object.map do |item| - if serializer = Serializer.serializer_for(item) + serializer = @options[:each_serializer] || Serializer.serializer_for(item) + if serializer serializer.new(item).serializable_object(@options.merge(root: nil)) else item.as_json diff --git a/test/unit/active_model/array_serializer_test.rb b/test/unit/active_model/array_serializer_test.rb index 9a77f3fb..25ede76b 100644 --- a/test/unit/active_model/array_serializer_test.rb +++ b/test/unit/active_model/array_serializer_test.rb @@ -27,6 +27,17 @@ module ActiveModel assert_equal expected, serializer.serializable_array end + + def test_array_serializers_each_serializer + array = [::Model.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }), + ::Model.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })] + serializer = ArraySerializer.new(array, each_serializer: ProfileSerializer) + + expected = [{'name' => 'Name 1', 'description' => 'Description 1'}, + {'name' => 'Name 2', 'description' => 'Description 2'}] + + assert_equal expected, serializer.serializable_array + end end end end