@@ -34,17 +34,18 @@ class Serializer
3434 # @param resource [ActiveRecord::Base, ActiveModelSerializers::Model]
3535 # @return [ActiveModel::Serializer]
3636 # Preferentially returns
37- # 1. resource.serializer
37+ # 1. resource.serializer_class
3838 # 2. ArraySerializer when resource is a collection
3939 # 3. options[:serializer]
4040 # 4. lookup serializer when resource is a Class
41- def self . serializer_for ( resource , options = { } )
42- if resource . respond_to? ( :serializer_class )
43- resource . serializer_class
44- elsif resource . respond_to? ( :to_ary )
41+ def self . serializer_for ( resource_or_class , options = { } )
42+ if resource_or_class . respond_to? ( :serializer_class )
43+ resource_or_class . serializer_class
44+ elsif resource_or_class . respond_to? ( :to_ary )
4545 config . collection_serializer
4646 else
47- options . fetch ( :serializer ) { get_serializer_for ( resource . class , options [ :namespace ] ) }
47+ resource_class = resource_or_class . class == Class ? resource_or_class : resource_or_class . class
48+ options . fetch ( :serializer ) { get_serializer_for ( resource_class , options [ :namespace ] ) }
4849 end
4950 end
5051
@@ -91,6 +92,8 @@ def self.get_serializer_for(klass, namespace = nil)
9192 serializer_class
9293 elsif klass . superclass
9394 get_serializer_for ( klass . superclass )
95+ else
96+ nil # No serializer found
9497 end
9598 end
9699 end
0 commit comments