[英]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.