作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 Ember 和 JSONAPI 时遇到了一些关系/包含和序列化程序的问题。
我有一条显示患者信息的路线:
import Ember from 'ember';
export default Ember.Route.extend({
model(params){
return this.store.find('patient', params.patient_id);
}
});
我有这两个模型:
病人
:
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')
});
和病史
:
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
) >) 模型而不是病历
。
处理路由时出错:...无法读取 null 的属性“type”TypeError:无法读取 null 的属性“type”
所以我必须创建一个 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);
}
},
});
我知道这可能不是最好的解决方案,但我什至无法尝试其他方法,因为它现在向我显示此错误:
处理路由时出错:...断言失败:您尝试推送类型为“anamnese”的数据,但找不到具有该名称的模型。
我缺少什么?我以错误的方式修复它?
最佳答案
anamnesis : DS.belongsTo('anamnesis')
更改为 anamnesis : DS.belongsTo('anamnese')
。anamnesis
更改为 anamnese
。Patient
序列化器来更改模型名称。上述更改将起作用。看看this twiddle
PS:find
在最新版本中已弃用,请考虑 findAll
关于ember.js - 处理路由时出错 : . .. 断言失败 : You tried to push data with a type . .. 但找不到具有该名称的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44579419/
我是一名优秀的程序员,十分优秀!