如何从rails api返回activerecord关系为2级的响应?

6ss1mwsb  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(247)

我正在为教师创建一个rails api,以便根据某些标准对学生进行排名。我有四个模型:教室、学生、标准和等级。
学生/标准是通过等级的多对多
学生/教室是多对多的
rank是学生/标准与rank附加字段之间的联接表,rank是1-4之间的整数。
我可以通过允许Classification.students通过我的课堂序列化程序返回属于某个课堂的学生列表作为响应(1关系深度)。如何从api返回课堂React(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"
         } ...
       ]
    }
  ]
}

提前谢谢。

dba5bblo

dba5bblo1#

rails上发布了一个类似的问题:使用活动的_model_序列化程序序列化深度嵌套的关联(感谢链接@lam phan)
然而,这篇文章中投票最多的答案并不十分清楚,也没有代码示例。超级失望。我还研究了jsonapi适配器,但没有找到我想要的解决方案。最后,对于链接的问题,我采用了与op相同的方法:在序列化程序中,我编写了自己的函数,并手动侧载了所需的其他数据。我本希望用“rails方式”来完成这项工作,但最终我选择了直接完成。

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

相关问题