I'm using active_model_serializer 0.10.0.rc5
and grape gem
for the api.
I've a post endpoint like this :
class V1::Endpoints::Posts < Grape::API
resource :posts do
desc 'Returns a list of posts.'
# serializing array
get '', each_serializer: V1::Serializers::PostSerializer do
@posts = Post.all
present @posts
end
end
end
My serializer looks something like this :
class V1::Serializers::PostSerializer < ActiveModel::Serializer
attributes :id, :name, :slug
end
Now when I try to access the post endpoint I get the following error :
ActiveModel::Serializer::CollectionSerializer::NoSerializerError - No serializer found for resource:
The issue which I figured out while debugging the issue lies in the CollectionSerializer#initialize
of this gem. I suppose that the serializer_class
variable is coming out to be nil.
I've tried almost all the links which seemed relevant for this problem. But none worked for me.
try to use serializer instead of each_serializer:
get '', serializer: V1::Serializers::PostSerializer do
Instead of:
get '', each_serializer: V1::Serializers::PostSerializer do
I ended using a DRYed version of render json: @object, serializer: Namespaced::ObjectSerializer
.
Since I have found little information on this matter, I've posted this approach here: Correct way to implement API versioning with active_model_serializers
I hope it helps!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With