Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ActiveModel::Serializer::CollectionSerializer::NoSerializerError in active_model_serializer 0.10.0.rc5

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.

like image 461
Rupali Avatar asked May 05 '16 15:05

Rupali


2 Answers

try to use serializer instead of each_serializer:

get '', serializer: V1::Serializers::PostSerializer  do

Instead of:

get '', each_serializer: V1::Serializers::PostSerializer  do
like image 138
Daniel Prado Fernandez Avatar answered Oct 18 '22 18:10

Daniel Prado Fernandez


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!

like image 43
chrisandrew.cl Avatar answered Oct 18 '22 18:10

chrisandrew.cl