We've run into this issue at my work and here's the relevant code to making this work: This is in serializers/application.js
import DS from 'ember-data'; export default DS.RESTSerializer.extend({ normalizeArrayResponse: function(store, primaryModelClass, payload, id, requestType) { let loadedRecords = store.peekAll(primaryModelClass.modelName); let payloadRecords = payload[Object.keys(payload)[0]]; let payloadRecordIds = payloadRecords.map(record => record.id); let size = loadedRecords.get("length");
for (var i = 0; i < size; i++) {
let loadedRecord = loadedRecords.objectAt(i);
/**
* Immediately unload the record if it should not be in the store
*/
if (payloadRecordIds.indexOf(Number(loadedRecord.get("id"))) == -1) {
if (loadedRecord) {
loadedRecord.unloadRecord();
}
} else {
/**
* Rollback attributes if the model is dirty.
* This preps unsaved changes to be overwritten
*/
if (loadedRecord && loadedRecord.get("hasDirtyAttributes")) {
loadedRecord.rollbackAttributes();
}
}
}
return this._super(store, primaryModelClass, payload, id, requestType);
},
normalizeSingleResponse: function(store, primaryModelClass, payload, id, requestType) {
let loadedRecord = store.peekRecord(primaryModelClass.modelName, id);
/**
* Rollback attributes if the model is dirty.
* This preps unsaved changes to be overwritten
*
* Note: should not be called on dirty objects
*/
if (loadedRecord && loadedRecord.get("hasDirtyAttributes")) {
loadedRecord.rollbackAttributes();
}
return this._super(store, primaryModelClass, payload, id, requestType);
},
});