简体   繁体   English

如何在序列化程序中迭代 hash 数组

[英]How to iterate over a array of hash in serializer

I have a grouped collection and I want to serialize it but it returns me with an error 'undefined method `read_attribute_for_serialization' for # '.我有一个分组集合,我想对其进行序列化,但它返回一个错误'未定义的方法'read_attribute_for_serialization' for #'。 This is my sample data without serializer:这是我没有序列化程序的示例数据:

{
    "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'}\"",
                }
            ]
        }
    }
}

This is my serializer:这是我的序列化器:


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

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

This is my controller code:这是我的 controller 代码:

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

But return me with an error: undefined method `read_attribute_for_serialization' for #<Hash:0x0000562eebbddee8>但是给我一个错误: undefined method `read_attribute_for_serialization' for #<Hash:0x0000562eebbddee8>

Please help.请帮忙。 Thanks.谢谢。

*.group_by() is an Enumerable method which returns Hash - I think render_collection expects to receive ActiveRecord::Relation - use *.group(:report_type) instead *.group_by()是一个Enumerable方法,它返回 Hash - 我认为 render_collection 期望接收ActiveRecord::Relation - 改用*.group(:report_type)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM