rails 5 api app jsonapi CollectionSerializer类型覆盖序列化

时间:2016-09-18 18:44:52

标签: ruby-on-rails serialization types json-api

使用jsonapi序列化作为默认序列化类型,是否有人知道在序列化集合时如何获取集合类型?

我已经尝试为资源指定自定义序列化程序并覆盖该类型,但是我收到错误

NoMethodError(UsersSerializer:Class的未定义方法`type'):

class UsersSerializer < ActiveModel::Serializer::CollectionSerializer
   type 'users'
end

class UsersSerializer < ActiveModel::Serializer::CollectionSerializer  
  def json_key
    "users"
  end
end

最后一个不会抛出错误但也不会发出类型

我想要的输出是与返回对象上具有type属性的jsonapi一致的输出。即。

{
    "type": "users",
    "data": [{user}{user}{user}]
}

我目前得到的是

{
    "data: [{user},{user},{user}]
}

当我从控制器中调用以下内容时

render json: @users, serializer: UsersSerializer, each_serializer: UserSerializer

render json: @users, serializer: UsersSerializer, :root='users', each_serializer: UserSerializer

render json: @users, serializer: UsersSerializer, json_key='users' each_serializer: UserSerializer

我知道我要做的事情可能很简单,但是搜索'ruby rails 5 api app jsonapi CollectionSerializer type'会发现一系列与我想要完成的事情无关的信息。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

经过进一步的研究,&#39;&#39;&#39;属性不是root用户的json-api规范的一部分。相反,我选择使用&#39; meta&#39;顶级集合类型的属性。即。

 render json: @users, serializer: UsersSerializer, :meta=>{:type=>"users"}, each_serializer: UserSerializer