如何在控制器外部递归使用ActiveModel :: Serializers?

问题描述 投票:0回答:1

目标:以递归方式对记录进行序列化,使其超出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"
  }
}
ruby-on-rails active-model-serializers
1个回答
0
投票

好的,我知道了。

您必须执行此操作:

ActiveModelSerializers::SerializableResource
  .new(@record, include: ['**']).as_json

您不能在序列化程序上调用new并传递它的选项;您必须使用ActiveModelSerializers::SerializableResource

© www.soinside.com 2019 - 2024. All rights reserved.