Добавление глобального корневого ключа и определенного корневого ключа для каждого сериализованного элемента с помощью активного сериализатора модели - PullRequest
0 голосов
/ 17 мая 2019

Я использую 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 голосов
/ 20 мая 2019

Для глобального корневого ключа мне нужно было добавить adapter: :json к вызову рендеринга

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

Чтобы добавить ключ в корень каждого сериализованного элемента, вы можете перезаписать метод attributes всериализатор.В этом конкретном случае вы можете сделать это так:

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