我使用Ember和JSONAPI在关系/包含和序列化方面遇到了一些问题。
我有一条路线可以显示病人的信息:
import Ember from 'ember';
export default Ember.Route.extend({
model(params){
return this.store.find('patient', params.patient_id);
}
});
我有两个模型:
patient
:
import DS from 'ember-data';
export default DS.Model.extend(validations, {
name : DS.attr('string'),
email : DS.attr('string'),
gender : DS.attr('string'),
birthDate : DS.attr('date'),
description : DS.attr('string'),
anamnesis : DS.belongsTo('anamnesis')
});
和anamnesis
:
import DS from 'ember-data';
export default DS.Model.extend({
smokes : DS.attr('boolean'),
drinks : DS.attr('boolean'),
drugUser : DS.attr('boolean')
});
如你所见,我与他们之间有一对一的关系。
现在,我从Ruby on Rails后端获得了这个JSONAPI响应
{
"data":{
"id":"3",
"type":"patients",
"attributes":{
"name":"paciente 3",
"gender":"female",
"email":"teste3@teste.com",
"birth-date":"2017-06-04T02:59:37.435Z"
},
"relationships":{
"anamnesis":{
"data":{
"id":"2",
"type":"anamneses"
}
}
}
},
"included":[
{
"id":"2",
"type":"anamneses",
"attributes":{
"smokes":null,
"drinks":null,
"drug-user":null
}
}
]
}
尝试序列化relationship
和included
时,它会查找anamnese
(来自后端的响应类型anamneses
)模型,而不是{{1 }}。
anamnesis
所以我必须创建一个Error while processing route: ... Cannot read property 'type' of null TypeError: Cannot read property 'type' of null
来解决这个问题:
PatientSerializer
我知道这可能不是最好的解决方案,但我甚至无法尝试别的东西,因为它现在向我显示了这个错误:
import DS from 'ember-data';
import Ember from 'ember';
export default DS.JSONAPISerializer.extend({
modelNameFromPayloadKey(payloadKey){
if(payloadKey === 'anamneses'){
return 'anamnesis';
} else {
return this._super(payloadKey);
}
},
modelNameFromPayloadType(payloadType){
if(payloadKey === 'anamneses'){
return 'anamnesis';
} else {
return this._super(payloadType);
}
},
});
我缺少什么?我修错了吗?
答案 0 :(得分:1)
anamnesis : DS.belongsTo('anamnesis')
更改为anamnesis : DS.belongsTo('anamnese')
。anamnesis
更改为anamnese
。Patient
序列化程序来更改型号名称。上述更改将有效。看看this twiddle
PS:find
在最新版本中已弃用,请考虑findAll