mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-24 23:06:50 +00:00
Don't pass serializer option to associated serializers
Fixes #870
Commit af81a40 introduced passing a serializer's 'options'
along to its associated model serializers.
Thus, an explicit 'each_serializer' passed to render for a
singular resource would be passed on as the implicit 'serializer'
for its associations.
With @bf4
This commit is contained in:
parent
7b0a85fdda
commit
0f0ef2baf5
@ -217,7 +217,7 @@ module ActiveModel
|
|||||||
if serializer_class
|
if serializer_class
|
||||||
serializer = serializer_class.new(
|
serializer = serializer_class.new(
|
||||||
association_value,
|
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)
|
elsif !association_value.nil? && !association_value.instance_of?(Object)
|
||||||
association_options[:association_options][:virtual_value] = association_value
|
association_options[:association_options][:virtual_value] = association_value
|
||||||
|
|||||||
@ -55,6 +55,14 @@ module ActionController
|
|||||||
|
|
||||||
render json: [@post], each_serializer: PostPreviewSerializer
|
render json: [@post], each_serializer: PostPreviewSerializer
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
tests MyController
|
tests MyController
|
||||||
@ -105,6 +113,31 @@ module ActionController
|
|||||||
|
|
||||||
assert_equal expected.to_json, @response.body
|
assert_equal expected.to_json, @response.body
|
||||||
end
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user