我正在使用ember cli mirage和我的琥珀色应用程序,我在灯具中定义数据并使用RestSerializer,我试图模拟更新记录的属性但是收到错误:url api / survey的补丁处理程序-groups / [id]引发错误:无法读取null的属性更新
mirage / config.js
this.patch('/survey-groups/:id', function({ surveyGroups }, request) {
let id = request.params.id;
let attrs = this.normalizedRequestAttrs();
return surveyGroups.find(id).update(attrs);
});
蜃/串行化器/ application.js中
import { RestSerializer } from 'ember-cli-mirage';
export default RestSerializer.extend({
primaryKey: 'keyId'});
应用/串行化器/ application.js中
import DS from 'ember-data';
export default DS.RESTSerializer.extend({
primaryKey: 'keyId', });
夹具样品;幻影/夹具/调查-groups.js
export default [
{
"code": "dfdj",
"description": "",
"keyId": 29116,
},
{...... }]
我还在服务器返回的数据中注意到,每个记录都添加了一个id属性,其中包含一个字符串值,例如: id:" 1" 当我尝试使用此字符串值代替id来查找记录时,将返回记录。
可能导致此错误和行为的原因
答案 0 :(得分:4)
ember-cli-mirage
的序列化程序没有primaryKey
选项。据我所知,海市蜃楼不提供自定义主键名称的任何可能性。因此,您无法使用find
方法。我建议改为使用findBy
:return surveyGroups.findBy({ keyId: id }).update(attrs);
另一种选择是使用更改有效负载的序列化(serialize
)和规范化(normalize
)上的主键名称。这种方法的好处是您仍然可以使用海市蜃楼shorthands。