使用活动模型序列化器为每个序列化项目添加全局根密钥和特定根密钥

时间:2019-05-17 10:21:46

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

我正在使用active-model-serializer。我有一个需要以特殊形式作为json返回的对象的集合。到目前为止,这是我写的内容:

  @tickets = Ticket.where(status: "PLACED")
  render json: @tickets, root: 'placed', each_serializer: ItemSerializer

这是我的商品序列化器:

class ItemSerializer < ApplicationSerializer
  attributes :pool_id, :selections

  def root
   "params"
 end
end

以下是当前代码的响应:

[{\"pool_id\":759,\"selections\":\"1/2/3/4/5/6/7/8\"}]

我希望能够向阵列的每个元素添加根密钥"params",并在阵列之前添加全局根密钥"placed",因此所需的输出为:

{ "placed": [
    {
      "params": {
        "pool_id": 123,
        "selections": "1/1/1"
      }
    }
  ]
}

如何通过主动模型序列化器实现?

1 个答案:

答案 0 :(得分:0)

对于全局根密钥,我需要在渲染调用中添加adapter: :json

render json: @tickets, root: 'placed', each_serializer: BatchItemSerializer, adapter: :json

要在每个序列化元素的根部添加密钥,可以覆盖序列化器中的attributes方法。在这种情况下,您可以这样:

  def attributes(*args)
    hash = super
    { params: hash }
  end