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

How do I customize the id of a json-api serialized model with active model serializers?

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

也就是说,我有一个项目,由于各种原因,正在序列化的特定模型的实际 ruby-on-rails ID 不被视为面向 public,但是另一个 public 面向的唯一标识符可用。

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

基本上,给定模型 [{ 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 值。

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

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