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

How to use ActiveModel::Serializers recursively outside of controller?

目标:在 Rails 控制器之外的嵌套级别之外递归地序列化记录,其中每个嵌套记录都使用自己的序列化程序。

我可以从控制器中递归地成功使用 ActiveModel::Serializers:

render json: @record, include: ['**']

并且我可以在控制器外部成功使用 ActiveModel::Serializers 到第一级嵌套:

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

但是,第二段代码不会递归到第一层之外。

例如,假设第一段代码returns如下:

{
  "name": "Parent",
  "child": {
    "name": "Child",
    "grandchild": {
      "name": "Grandchild"
    }
  }
}

第二段代码然后returns如下:

{
  "name": "Parent",
  "child": {
    "name": "Child"
  }
}

好的,我明白了。

你必须这样做:

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

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