【问题标题】:rails 5 api app jsonapi CollectionSerializer type override on serializationrails 5 api app jsonapi CollectionSerializer 类型覆盖序列化
【发布时间】:2017-01-26 10:40:27
【问题描述】:

使用jsonapi序列化作为默认的序列化类型,有谁知道在序列化集合时如何获取包含的集合类型?

我尝试为资源指定自定义序列化程序并覆盖类型,但出现错误

NoMethodError(UsersSerializer:Class 的未定义方法“类型”):

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”会发现大量与我想要完成的事情无关的信息。

非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

    经过进一步研究,'type' 属性不是根 json-api 规范的一部分。相反,我选择在顶级集合类型上使用“元”属性。即

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多