diff --git a/lib/action_controller/serialization.rb b/lib/action_controller/serialization.rb index 415167ef..2ad9ab00 100644 --- a/lib/action_controller/serialization.rb +++ b/lib/action_controller/serialization.rb @@ -39,17 +39,19 @@ module ActionController options.partition { |k, _| ADAPTER_OPTION_KEYS.include? k }.map { |h| Hash[h] } if use_adapter? && (serializer = get_serializer(resource)) - @_serializer_opts[:scope] ||= serialization_scope @_serializer_opts[:scope_name] = _serialization_scope - # omg hax - object = serializer.new(resource, @_serializer_opts) - adapter = ActiveModel::Serializer::Adapter.create(object, @_adapter_opts) - super(adapter, options) - else - super(resource, options) + object = serializer.new(resource, @_serializer_opts) + + if serializer == ActiveModel::Serializer.config.array_serializer + resource = ActiveModel::Serializer::Adapter.create(object, @_adapter_opts) unless object.objects.all? {|i| i.nil?} + else + resource = ActiveModel::Serializer::Adapter.create(object, @_adapter_opts) + end end + + super(resource, options) end end diff --git a/lib/active_model/serializer/array_serializer.rb b/lib/active_model/serializer/array_serializer.rb index 174e16fc..d12b8f48 100644 --- a/lib/active_model/serializer/array_serializer.rb +++ b/lib/active_model/serializer/array_serializer.rb @@ -4,7 +4,7 @@ module ActiveModel include Enumerable delegate :each, to: :@objects - attr_reader :meta, :meta_key + attr_reader :meta, :meta_key, :objects def initialize(objects, options = {}) @resource = objects @@ -13,7 +13,10 @@ module ActiveModel :serializer, ActiveModel::Serializer.serializer_for(object) ) - serializer_class.new(object, options.except(:serializer)) + + unless serializer_class.nil? + serializer_class.new(object, options.except(:serializer)) + end end @meta = options[:meta] @meta_key = options[:meta_key]