我正在为教师创建一个Rails api,以便根据某些标准对学生进行排名。我有四种模式:课堂、学生、标准和等级。
- 通过排名,学生/标准是多对多
- 学生/教室多对多
- 等级是学生/标准之间的联接表,带有等级的附加字段,等级是1-4之间的整数
通过允许Classroom.Students通过我的课堂序列化程序,我可以在响应中返回属于某个课堂的学生列表(1关系深(。在API的课堂回复(2个深层关系(中,如何返回每个学生嵌套在学生中的排名?理想响应如下:
教室_A:
{
id: "123",
name: "classroom A",
students: [
{ id: "456"
name: Juanita,
gender: female,
ranks: [
{ id: "789",
student_id: "456",
name: "willingness to help others",
rank: "4"
},
{ id: "101",
student_id: "456",
name: "Leadership",
rank: "3"
} ...
]
},
{ id: "232"
name: Billy,
gender: male,
ranks: [
{ id: "789",
student_id: "232",
name: "willingness to help others",
rank: "3"
},
{ id: "101",
student_id: "232",
name: "Leadership",
rank: "3"
} ...
]
}
]
}
提前谢谢。
Rails上发布了一个类似的问题:用active_model_serializers序列化深度嵌套的关联(感谢链接@lam Phan(
然而,该帖子的投票率最高的答案并不是非常清楚,也没有代码示例。超级恶心。我还研究了JsonApi适配器,但无法获得我想要的解决方案。最后,对于链接的问题,我采用了与OP相同的路线:在序列化程序中,我编写了自己的函数,并手动侧加载了我想要的其他数据。我希望在";轨道";但最终我还是选择了完成它。
class ClassroomSerializer < ApplicationSerializer
attributes :id, :name, :school_name, :students
def students
customized_students = []
object.students.each do |student|
custom_student = student.attributes
custom_student['ranks'] = student.student_ranks
customized_students.push(custom_student)
end
customized_students
end
end