【发布时间】:2016-03-01 19:51:26
【问题描述】:
我有一个名为“Membership”的模型,它有一个字符串属性“inviteToken”,我想将其用作我的主键。
我创建了以下序列化程序,但无法让它从 JSON 中获取主键。
app/serializers/membership.js:
import DS from 'ember-data';
export default DS.JSONAPISerializer.extend({
primaryKey: 'invite-token' // also tried 'inviteToken'
});
我得到的具体错误是:
处理路由时出错:invitations.show 断言失败:您 必须在传递给“push”的对象中包含一个“id”作为成员资格
错误:断言失败:您必须在 传递给“推送”的对象
当我尝试通过路径中的 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 检查器中看到“membership”作为 id。就好像 ember 数据不知道如何使用“属性”中的某些东西。我正在使用 ember 数据 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 我添加了路由代码和一个序列化程序,它可以满足我的需要。
标签: ember.js ember-data json-api