gpt4 book ai didi

ember.js - 处理路由时出错 : . .. 断言失败 : You tried to push data with a type . .. 但找不到具有该名称的模型

转载 作者:行者123 更新时间:2023-12-03 06:27:31 25 4
gpt4 key购买 nike

我在使用 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
}
}
]
}

当尝试序列化relationshipincluded时,它会查找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”的数据,但找不到具有该名称的模型。

我缺少什么?我以错误的方式修复它?

最佳答案

  1. anamnesis : DS.belongsTo('anamnesis') 更改为 anamnesis : DS.belongsTo('anamnese')
  2. 将模型文件名 anamnesis 更改为 anamnese
  3. 您不需要引入 Patient 序列化器来更改模型名称。

上述更改将起作用。看看this twiddle

PS:find 在最新版本中已弃用,请考虑 findAll

关于ember.js - 处理路由时出错 : . .. 断言失败 : You tried to push data with a type . .. 但找不到具有该名称的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44579419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com