Мы используем JSONAPI для этого проекта, но по [причинам] мы не можем обрабатывать его рекомендуемую структуру отношений в API, поэтому вместо этого мы обслуживаем и ожидаем их как вложенные объекты в следующем формате:
{
"data":{
"type":"video",
"id":"55532284a1f9f909b0d11d73",
"attributes":{
"title":"Test",
"transcriptions":{
"type": "embedded",
"data":[
{
"type":"transcription",
"id":"203dee25-4431-42d1-a0ba-b26ea6938e75",
"attributes":{
"transcriptText":"Some transcription text here. And another sentence after it.",
"cuepoints":{
"type":"embedded",
"data":[
{
"type":"cuepoint",
"id":"bb6b0434-bdc4-43e4-8010-66bdef5c432a",
"attributes":{
"text":"Some transcription text here."
}
},
{
"type":"cuepoint",
"id":"b663ee00-0ebc-4cf4-96fc-04d904bc1baf",
"attributes":{
"text":"And another sentence after it."
}
}
]
}
}
}
]
}
}
}
}
У меня есть следующая структура модели:
// models/video
export default DS.Model.extend({
transcriptions: DS.hasMany('transcription')
)};
// models/transcription
export default DS.Model.extend({
video: DS.belongsTo('video'),
cuepoints: DS.hasMany('cuepoint')
});
// models/cuepoint
export default DS.Model.extend({
transcription: DS.belongsTo('transcription')
);
Теперь нам нужно сохранить запись video
и сериализовать содержащиеся в ней transcriptions
и cuepoints
. У меня есть следующий сериализатор, и он отлично работает для встраивания transcription
в video
, т.е. один уровень, но он мне нужен, чтобы затем встроить в него cuepoints
.
export default DS.JSONAPISerializer.extend({
serializeHasMany: function(record, json, relationship) {
var hasManyRecords, key;
key = relationship.key;
hasManyRecords = Ember.get(record, key);
if (hasManyRecords) {
json.attributes[key] = {};
hasManyRecords.forEach(function(item) {
json.attributes[key].data = json.attributes[key].data || [];
json.attributes[key].data.push({
attributes: item._attributes,
id: item.get('id'),
type: item.get('type')
});
});
} else {
this._super(record, json, relationship);
}
}
});
Проверяя свойства record
, json
и relationship
в методе serializeHasMany
, я ничего не вижу о вложенных отношениях, поэтому даже не уверен, что использую правильный метод.
Любые идеи, где я ошибаюсь с этим?