2016-05-05 8 views
6

Я использую active_model_serializer 0.10.0.rc5 и grape gem для api.ActiveModel :: Serializer :: CollectionSerializer :: NoSerializerError в active_model_serializer 0.10.0.rc5

У меня есть пост конечной точки, как это:

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 

Моя сериализатору выглядит примерно так:

class V1::Serializers::PostSerializer < ActiveModel::Serializer 
    attributes :id, :name, :slug 
end 

Теперь, когда я пытаюсь получить доступ к сообщению конечной точке я получаю следующую ошибку:

ActiveModel::Serializer::CollectionSerializer::NoSerializerError - No serializer found for resource: 

Проблема, которую я выяснил при отладке проблемы, находится в CollectionSerializer#initialize этой жемчужины. Я полагаю, что переменная serializer_class выходит на нуль.

Я пробовал почти все ссылки, которые, похоже, были релевантными для этой проблемы. Но никто не работал для меня.

ответ

2

пытаются использовать сериалайзер вместо each_serializer:

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

Вместо:

get '', each_serializer: V1::Serializers::PostSerializer do 
1

Я закончил с использованием сушится версии render json: @object, serializer: Namespaced::ObjectSerializer.

Поскольку я нашел мало информации по этому вопросу, я отправил этот подход здесь: Correct way to implement API versioning with active_model_serializers

Я надеюсь, что это помогает!