【问题标题】:How to iterate over a array of hash in serializer如何在序列化程序中迭代哈希数组
【发布时间】:2020-04-30 08:58:28
【问题描述】:

我有一个分组集合,我想对其进行序列化,但它返回错误“未定义的方法 `read_attribute_for_serialization' for #”。这是我没有序列化程序的示例数据:

{
    "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 #&lt;Hash:0x0000562eebbddee8&gt;

请帮忙。谢谢。

【问题讨论】:

  • 参数有双引号引起来。您需要删除引号。
  • @AmitPatel 是的,但这与她遇到的错误无关。

标签: ruby-on-rails ruby active-model-serializers


【解决方案1】:

*.group_by() 是一个返回 Hash 的 Enumerable 方法 - 我认为 render_collection 预计会收到 ActiveRecord::Relation - 请改用 *.group(:report_type)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2014-12-15
    • 2023-04-07
    • 2015-08-30
    • 1970-01-01
    • 2011-11-16
    • 2015-11-08
    • 1970-01-01
    相关资源
    最近更新 更多