Как перебрать массив ha sh в сериализаторе - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть сгруппированная коллекция, и я хочу сериализовать ее, но она возвращает меня с ошибкой «неопределенный метод« read_attribute_for_serialization »для #». Это мой пример данных без сериализатора:

{
    "message": "success",
    "data": {
        "reports": {
            "export": [
                {
                    "name": "Order",
                    "report_type": "export",
                    "parameters": "\"{order_date: '10-10-2019'}\"",

                },
                {
                    "name": "Order",
                    "report_type": "export",
                    "parameters": "\"{order_date: '10-10-2019'}\"",
                }],
            "import": [
                {
                    "name": "Order",
                    "report_type": "import",
                    "parameters": "\"{order_date: '10-10-2019'}\"",
                },
                {
                    "name": "Order",
                    "report_type": "import",
                    "parameters": "\"{order_date: '10-10-2019'}\"",
                }
            ],
            "details": [
                {
                    "name": "Order",
                    "report_type": "details",
                    "parameters": "\"{order_date: '10-10-2019'}\"",
                },
                {
                    "name": "Order",
                    "report_type": "details",
                    "parameters": "\"{order_date: '10-10-2019'}\"",
                }
            ]
        }
    }
}

Это мой сериализатор:


class ReportSerializer < ActiveModel::Serializer
  attributes :id, :name, :report_type, :parameters

  def parameters
    JSON.parse(object.parameters)
  end
end

Это код моего контроллера:

  def reports_list
    reports = Report.all.group_by(&:report_type)
    render_collection(reports, { name: 'reports' }, each_serializer: ReportSerializer)
  end

Но верните мне ошибка: undefined method `read_attribute_for_serialization' for #<Hash:0x0000562eebbddee8>

Пожалуйста, помогите. Спасибо.

1 Ответ

2 голосов
/ 30 апреля 2020

*.group_by() - это метод Enumerable, который возвращает Ha sh - я думаю, что render_collection ожидает получить ActiveRecord::Relation - используйте *.group(:report_type) вместо

...