我正在使用active_model_serializer 0.10.0.rc5
和grape 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
变量是零。
我已经尝试了几乎所有与此问题相关的链接。但没有一个对我有用。
答案 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
我希望它有所帮助!