如何使用active_model_serializers为嵌套对象选择序列化程序

时间:2014-01-22 00:00:18

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

我正在使用rails 4.0.0并且正在寻找一种方法来序列化一个自定义对象,该对象包含具有这些预定义对象的序列化程序的预定义对象。

示例:我有一个带有序列化程序StudentSerializer的模型Student。我想渲染一个JSON对象,如下所示:

{ 
  user_type: "student"
  student: {
    id: 1
    email: fake@email.com
  }
}

我为Student编写的序列化程序仅序列化了email和id属性。但是当我打电话时:

render json: {user_type="student", student: stu}

我得到了具有所有属性的学生的完整对象。是否可以为JSON resposne中的嵌套对象选择带有active_model_serializers的序列化程序?

一个可能的解决方案可能是编写一个新的序列化程序,它包含我刚刚描述的整个对象,并将其用作序列化程序,但我宁愿在可能的情况下避免这种情况。

1 个答案:

答案 0 :(得分:6)

我找到了解决方案。它不能自动执行,但您可以使用以下命令强制嵌套对象上的序列化程序:

render json: {user_type: "student", student: StudentSerializer.new(stu)}

一个有趣的说明是提交了一个拉取请求,并且仍然处于有效的active_model_serializers https://github.com/rails-api/active_model_serializers/pull/300状态,这将自动执行此任务。