mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-25 07:16:49 +00:00
Support serializer and each_serializer in render json
This commit is contained in:
@@ -8,16 +8,25 @@ module ActionController
|
||||
|
||||
ADAPTER_OPTION_KEYS = [:include, :root]
|
||||
|
||||
def get_serializer(resource, options)
|
||||
@_serializer ||= if (serializer = options.delete :serializer)
|
||||
options[:serializer] = options.delete :each_serializer
|
||||
serializer
|
||||
else
|
||||
ActiveModel::Serializer.serializer_for(resource)
|
||||
end
|
||||
end
|
||||
|
||||
[:_render_option_json, :_render_with_renderer_json].each do |renderer_method|
|
||||
define_method renderer_method do |resource, options|
|
||||
serializer = ActiveModel::Serializer.serializer_for(resource)
|
||||
|
||||
if serializer
|
||||
adapter_opts, serializer_opts =
|
||||
options.partition { |k, _| ADAPTER_OPTION_KEYS.include? k }
|
||||
adapter_opts, serializer_opts =
|
||||
options.partition { |k, _| ADAPTER_OPTION_KEYS.include? k }.map { |h| Hash[h] }
|
||||
|
||||
if (serializer = get_serializer(resource, serializer_opts))
|
||||
# omg hax
|
||||
object = serializer.new(resource, Hash[serializer_opts])
|
||||
adapter = ActiveModel::Serializer.adapter.new(object, Hash[adapter_opts])
|
||||
object = serializer.new(resource, serializer_opts)
|
||||
adapter = ActiveModel::Serializer.adapter.new(object, adapter_opts)
|
||||
super(adapter, options)
|
||||
else
|
||||
super(resource, options)
|
||||
|
||||
@@ -6,7 +6,10 @@ module ActiveModel
|
||||
|
||||
def initialize(objects, options = {})
|
||||
@objects = objects.map do |object|
|
||||
serializer_class = ActiveModel::Serializer.serializer_for(object)
|
||||
serializer_class = options.fetch(
|
||||
:serializer,
|
||||
ActiveModel::Serializer.serializer_for(object)
|
||||
)
|
||||
serializer_class.new(object)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user