Как использовать ActiveModel :: Serializer рекурсивно вне контроллера? - PullRequest
0 голосов
/ 30 октября 2019

Цель: рекурсивно сериализовать записи за пределы одного уровня вложенности вне контроллера Rails, где каждая вложенная запись использует свой собственный сериализатор.

Я могу успешно использовать ActiveModel :: Serializer рекурсивно изнутри контроллера:

render json: @record, include: ['**']

И я могу успешно использовать ActiveModel :: Serializer вне контроллера до первого уровня вложенности:

RecordSerializer.new(@record, include: ['**']).as_json

Однако второй фрагмент кода не возвращается за пределы первого уровня.

Например, предположим, что первый фрагмент кода возвращает следующее:

{
  "name": "Parent",
  "child": {
    "name": "Child",
    "grandchild": {
      "name": "Grandchild"
    }
  }
}

Затем второй фрагмент кода возвращает следующее:

{
  "name": "Parent",
  "child": {
    "name": "Child"
  }
}

1 Ответ

0 голосов
/ 30 октября 2019

Хорошо, я понял это.

Вы должны сделать это:

ActiveModelSerializers::SerializableResource
  .new(@record, include: ['**']).as_json

Вы не можете вызвать new на сериализаторе и передать ему параметры;Вы должны использовать ActiveModelSerializers::SerializableResource.

...