Как сериализовать вложенные отношения has_many - PullRequest
0 голосов
/ 16 апреля 2020

В моем приложении у меня есть модель Игра , которая имеет has_many отношение к модели Этап , и модель Этап , которая имеет has_many отношение к модели Победа .

У меня проблема с сериализацией, так как я хочу, чтобы ответ выглядел так:

{
  "game_id": 1,
  "stages": [
    {
      "stage_id": 1,
      "winnings": [
        {
          "winning_id": 1
        },
        { ... }
      ]
    },
    { ... }
  ]
}

Однако, когда я сериализую его так:

class Admin::GameResultsSerializer < ActiveModel::Serializer
  attribute :id

  has_many :stages

  class StageSerializer < ActiveModel::Serializer
    attribute :id

    has_many :winnings

    class WinningSerializer < ActiveModel::Serializer
      attribute :id

      belongs_to :user
    end
  end
end

Я не возвращаю выигрыш в ответ - ответ возвращает только игры с этапами, и я понятия не имею, почему.

Буду признателен за помощь.

1 Ответ

0 голосов
/ 16 апреля 2020

Мне удалось это сделать. Ключ должен был включить требуемые таблицы в рендер контроллера с помощью метода include:

class Admin::GameResultsController < Admin::BaseController
  def index
    render json: Game.find(params[:game_id],
           include: { stages: { winnings: :user } }  
  end
end

, и он добился цели!

...