У меня есть модель под названием «Членство», которая имеет строковый атрибут «inviteToken», который я хотел бы использовать в качестве основного ключа.Как переопределить первичный ключ с атрибутом API JSON
Я создал следующий сериализатор, но не могу получить его для получения первичного ключа от 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'
Что происходит, когда я пытаюсь получить запись по идентификатору в маршруте :
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"
}
}
}
Странно то, что если я использую «тип» в качестве первичного ключа, я вижу «членство» в качестве идентификатора в инспекторе. Это как если бы данные ember не знали, как использовать что-то из «атрибутов». Я использую данные ember 2.4.0.
Update
Я могу взломать эту работу в моем сериализаторе, делая это:
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 Я добавил код маршрута и сериализатор, который делает то, что мне нужно. –