我有一个叫做“Membership”的模型,它有一个字符串属性“inviteToken”,我想用它作为我的主键。如何用JSON API属性覆盖主键
我创建了以下序列化程序,但无法从JSON中获取主键。
应用程序/串行器/ membership.js:
import DS from 'ember-data';
export default DS.JSONAPISerializer.extend({
primaryKey: 'invite-token' // also tried 'inviteToken'
});
我得到特定的错误是:
Error while processing route: invitations.show Assertion Failed: You must include an 'id' for membership in an object passed to 'push'
Error: Assertion Failed: You must include an 'id' for membership in an object passed to 'push'
,当我试图通过其ID的路线到达创纪录恰好:
import Ember from 'ember';
export default Ember.Route.extend({
model(params) {
return this.store.find('membership', params.token);
}
});
API响应:
{
"jsonapi":{
"version":"1.0"
},
"data":{
"type":"membership",
"id":"30",
"attributes":{
"invite-token":"5bGo7IhZh93E4SB07VWauw"
}
}
}
奇怪的是,如果我使用“type”作为主键,我会在ember inspector中看到“membership”作为id。就好像烬数据不知道如何使用“属性”中的某些东西。我使用的是烬数据2.4.0。
更新
我可以破解这个在我的串行做这个工作:
import DS from 'ember-data';
export default DS.JSONAPISerializer.extend({
normalize: function(type, hash) {
const json = this._super(type, hash);
json.data.id = json.data.attributes.inviteToken;
return json;
}
});
你什么时候得到这些错误?与'store'有关的具体代码是什么原因造成的? –
@DanielKmak我添加了路由代码和一个序列化器,它可以完成我需要的工作。 –