Rails - активная модель сериализации массива хэшей в сериализаторе - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь создать вложенный сериализованный массив хэшей.Пока у меня есть следующее.Он не возвращает вложенный сериализатор, а только массив хэшей.

module Api
  module V1
    class ReportShowSerializer < ActiveModel::Serializer
      attributes :name, :schedule, :uuid, :reports

       has_many :reports, each_serializer: ReportBuildSerializer

      def reports
        [
          {date: '2018-10-04', test: 'a'},
          {date: '2018-10-03', test: 'b'}
        ]
      end
    end
  end
end

и другой сериализатор

module Api
  module V1
    class ReportBuildSerializer < ActiveModel::Serializer
      attributes :test, :date, :var


      def var
        "var"
      end
    end
  end
end

, но возвращает следующий

{
    "data": {
        "id": "2",
        "type": "reports",
        "attributes": {
            "name": "Another test report",
            "schedule": "weekly",
            "uuid": "f10736ae-bf5c-4e43-8cd4-35eb0dc12efd",
            "reports": [
                {
                    "date": "2018-10-04",
                    "test": "ff"
                },
                {
                    "date": "2018-10-03",
                    "test": "ff"
                }
            ]
        }
    }
}

Так что я не думаю, что он использует ReportBuildSerializer

1 Ответ

0 голосов
/ 04 октября 2018

Когда вы визуализируете свои объекты (reports), вероятно, в controller.Не могли бы вы убедиться, что вы делаете это так:

render json: @reports, include: 'reports'

Если это не работает, то вы можете пойти другим путем:

module Api
  module V1
    class ReportShowSerializer < ActiveModel::Serializer
      attributes :name, :schedule, :uuid, :reports

       has_many :reports, each_serializer: ReportBuildSerializer

      def reports
        [
          ::Api::V1:: ReportBuildSerializer.new({date: '2018-10-04', test: 'a'}).attributes,
          ::Api::V1:: ReportBuildSerializer.new({date: '2018-10-03', test: 'b'}).attributes
        ]
      end
    end
  end
end
...