diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 00eed5bc..0da1755b 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -217,7 +217,7 @@ module ActiveModel if serializer_class serializer = serializer_class.new( association_value, - options.merge(serializer_from_options(association_options)) + options.except(:serializer).merge(serializer_from_options(association_options)) ) elsif !association_value.nil? && !association_value.instance_of?(Object) association_options[:association_options][:virtual_value] = association_value diff --git a/test/action_controller/explicit_serializer_test.rb b/test/action_controller/explicit_serializer_test.rb index ff0a07e6..5fafafa5 100644 --- a/test/action_controller/explicit_serializer_test.rb +++ b/test/action_controller/explicit_serializer_test.rb @@ -55,6 +55,14 @@ module ActionController render json: [@post], each_serializer: PostPreviewSerializer end + + def render_using_explicit_each_serializer + @comment = Comment.new({ id: 1, body: 'ZOMG A COMMENT' }) + @author = Author.new(id: 1, name: 'Joao Moura.') + @post = Post.new({ id: 1, title: 'New Post', body: 'Body', comments: [@comment], author: @author }) + + render json: @post, each_serializer: PostSerializer + end end tests MyController @@ -105,6 +113,31 @@ module ActionController assert_equal expected.to_json, @response.body end + + def test_render_using_explicit_each_serializer + get :render_using_explicit_each_serializer + + expected = { + id: 1, + title: 'New Post', + body: 'Body', + comments: [ + { + id: 1, + body: 'ZOMG A COMMENT' } + ], + blog: { + id: 999, + name: 'Custom blog' + }, + author: { + id: 1, + name: 'Joao Moura.' + } + } + + assert_equal expected.to_json, @response.body + end end end end