在我的应用中,我有学生,可以注册 课程。
注册会记录开始和结束日期以及类的引用。
类具有详细信息,如类名称和说明。
学生(1) - (N)入学(1) - (1)课程
因此
学生(1) - (N)班级
这就是我想要的对象。
{
"studentId": 1,
"name": "Henrietta",
"enrolledClasses": [
{
"enrollmentId": 12,
"startDate": "2015-08-06T17:43:14.000Z",
"endDate": null,
"class":
{
"classId": 15,
"name": "Algebra",
"description": "..."
}
},
"enrollmentId": 13,
"startDate": "2015-08-06T17:44:14.000Z",
"endDate": null,
"class":
{
"classId": 29,
"name": "Physics",
"description": "..."
}
}
}
但是我的RESTful API不能(轻松地)输出关系的完整嵌套结构,因为它的ORM不能通过关系做多对多。所以我得到了学生和他们的多个注册,但只有每个人的课程参考,而不是详细信息。我需要显示细节,而不仅仅是Id。
我可以等待学生对象可用,然后使用引用为每个classId进行额外的API调用以获取详细信息,但不确定如何,或者甚至是否将它与学生对象集成
这是我到目前为止所做的。
function findOne() {
vm.student = StudentsResource.get({
studentId: $stateParams.studentId
});
};
这是我从API中获取的内容
{
"studentId": 1,
"name": "Henrietta",
"enrolledClasses": [
{
"enrollmentId": 12,
"startDate": "2015-08-06T17:43:14.000Z",
"endDate": null,
"class": 15
},
"enrollmentId": 13,
"startDate": "2015-08-06T17:44:14.000Z",
"endDate": null,
"class": 29
}
}
对于班级细节,我可以一次一个,但还没有弄清楚如何等待学生对象将它们推入其中。也不是如何正确推动它们......
{
"classId": 15,
"name": "Algebra",
"description": "..."
}
{
"classId": 29,
"name": "Physics",
"description": "..."
}
通过注册将学生和班级的详细信息合并为一个对象是不错的做法?
请注意,该应用程序将允许更改学生详细信息和注册,但不应允许更改班级名称或说明的详细信息。因此,如果Angular要为对象发送PUT,则不应尝试发送任何类的详细信息,仅发送引用。这将强制服务器端保护数据,但为了避免错误,客户端不应该尝试。
对于后台,我正在使用SailsJS和PostgreSQL作为后端API。
答案 0 :(得分:1)
所以基本上在Sailsjs方面你应该覆盖StudentController.js中的findOne函数。假设您正在使用蓝图。
www.frutasadomicilio.cl/venta-de-verduras
说明:
1.使用Lo-dash的_.pluck函数返回一个classIds数组,我们找到了我们想要填充的所有类。然后我们使用promise chain .spread(),创建一个由classid索引的数组,并将classIds映射到我们想要填充到Student.findOne()返回的学生的注册中的实际类实例。
2.让学生注册参加人数充足的课程。