如何使用活动模型序列化程序自定义json-api序列化模型的ID?

时间:2017-08-25 21:59:45

标签: ruby-on-rails active-model-serializers json-api

我希望能够在活动模型序列化程序中自定义json api适配器使用的id。

即,我有一个项目,其中序列化的特定模型的实际ruby-on-rails ID由于各种原因而不被视为面向公众,但是可以使用备用的面向公众的唯一标识符。

我想使用此标识符作为json api序列化内容的id,但我无法找出任何明显的方法来覆盖json api序列化程序中的ID。

基本上,给定模型[{ id: 1, alt_id: '2aef7e'}, { id: 2, alt_id: '3b47c0' } ...]我想要一种创建序列化版本的方法:

{
 "data":
  [{
    "id" : "2aef7e",
    "type" : "my-model",
    "attributes" : {...},
    "relationships" : {...}
   },{
    "id" : "3b47c0",
    "type" : "my-model",
    "attributes" : {...},
    "relationships" : {...}
   }],
 "included" : [ ... ]
}

而不是:

{
 "data":
  [{
    "id" : "1",
    "type" : "my-model",
    "attributes" : {...},
    "relationships" : {...}
   },{
    "id" : "2",
    "type" : "my-model",
    "attributes" : {...},
    "relationships" : {...}
   }],
 "included" : [ ... ]
}

但一直无法找到覆盖序列化ID值的明显方法。

1 个答案:

答案 0 :(得分:1)

您可以在序列化程序中定义一个方法,以避免使用对象的方法。

class MySerializer < ActiveModel::Serializer
  attribute :id
  def id
    object.alt_id
  end
end