active_model_serializer 0.10.0.rc5

时间:2016-05-05 15:02:03

标签: ruby-on-rails-4 active-model-serializers grape-api

我正在使用active_model_serializer 0.10.0.rc5grape gem作为api。

我有一个这样的帖子端点:

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

现在,当我尝试访问post端点时,出现以下错误:

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

我在调试问题时想出的问题在于这个gem的CollectionSerializer#initialize。我想serializer_class变量是零。

我已经尝试了几乎所有与此问题相关的链接。但没有一个对我有用。

2 个答案:

答案 0 :(得分:2)

尝试使用序列化程序而不是each_serializer:

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

而不是:

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

答案 1 :(得分:1)

我最终使用的是render json: @object, serializer: Namespaced::ObjectSerializer的DRYed版本。

由于我在这方面找不到什么信息,我在这里发布了这种方法:Correct way to implement API versioning with active_model_serializers

我希望它有所帮助!