目标:以递归方式对记录进行序列化,使其超出Rails控制器外部的嵌套层次,在该层次中,每个嵌套的记录都使用自己的序列化程序。
我可以在控制器中成功地递归使用ActiveModel :: Serializers:
render json: @record, include: ['**']
而且我可以在控制器外部成功使用ActiveModel :: Serializers进行第一层嵌套:
RecordSerializer.new(@record, include: ['**']).as_json
但是,第二段代码不会递归到第一级之外。
例如,假设第一段代码返回以下内容:
{
"name": "Parent",
"child": {
"name": "Child",
"grandchild": {
"name": "Grandchild"
}
}
}
然后第二段代码返回以下内容:
{
"name": "Parent",
"child": {
"name": "Child"
}
}
好的,我知道了。
您必须执行此操作:
ActiveModelSerializers::SerializableResource
.new(@record, include: ['**']).as_json
您不能在序列化程序上调用new并传递它的选项;您必须使用ActiveModelSerializers::SerializableResource
。