2016-01-19 3 views
1

У меня есть бэкэнд, который создаст новый ресурс по запросу PUT, если запрошенный ресурс не найден. IE ..Ember - Обновление записи ember с новым идентификатором по запросу PUT

  1. PUT Сделать запрос /api/v1/person/1/

  2. По одной причине или другому лицу с идентификатором 1 был удален с сервера

  3. Сервер создает новый человек запись с идентификатором 2

Теперь в моем случае эти запросы запускаются из приложения Ember. Когда я пытаюсь обновить человека в хранилище Ember с идентификатором 1, и он удаляется на сервере, я получаю: An adapter cannot assign a new id to a record that already has an id.

Сервер вернул новую запись человека с ошибками id 2 и Ember, пытающимися применить ее к модель имеет в это хранилище с идентификатором 1.

до сих пор я переопределение метода updateId из DS.Store:

export default DS.Store.extend({ 
    updateId: function(record, data) { 
    var oldId = Ember.get(record, 'id'); 
    var id = coerceId(data.id); 

    if (oldId && oldId !== id) { 
     this.typeMapFor(record.constructor).idToRecord[oldId] = record; 
    } else { 
     this.typeMapFor(record.constructor).idToRecord[id] = record; 
    } 

    Ember.set(record, 'id', id); 
    }, 
}; 

Но это только кажется неправильным. Есть ли какие-либо негативные последствия для этого переопределения? Или есть ли другой способ обойти это?

ответ

0

Я бы попытался взглянуть на unloadRecord. Сделайте запрос PUT. Если это не удается из-за этой ошибки, выгрузите запись и извлеките ее снова и повторите попытку PUT

Смежные вопросы