2016-04-04 6 views
1

Я пытаюсь создать запись со связанными записями в одном запросе. В случае, если некоторые из вложенных записей имеют ошибки проверки, я хотел бы получить соответствующие ошибки в этой записи. Я использую адаптер json-api, так какой должен быть формат ошибок из бэкэнда? Я пытаюсь что-то вроде этого, не повезло, хотя:Ember-data: ошибки проверки на отношения (hasMany)

{"errors":[ 
    { 
    "detail": "can't be blank", 
    "source": { 
     "pointer":"data/relationships/steps/0/data/attributes/est_threshold" 
    } 
    } 
]} 

Согласно этой линии, она должна быть реализована как-то: https://github.com/emberjs/data/blob/master/addon/adapters/errors.js#L7

Есть идеи?

ответ

0

Вам нужно будет отбросить вложенные записи в данные. Пример структуры приведены в руководствах Ember является:

{ 
    "post": { 
    "id": 1, 
    "title": "Node is not omakase", 
    "comments": [1, 2, 3] 
    }, 

    "comments": [{ 
    "id": 1, 
    "body": "But is it _lightweight_ omakase?" 
    }, 
    { 
    "id": 2, 
    "body": "I for one welcome our new omakase overlords" 
    }, 
    { 
    "id": 3, 
    "body": "Put me on the fast track to a delicious dinner" 
    }] 
} 

https://guides.emberjs.com/v1.10.0/models/the-rest-adapter/

+0

Вопрос касался ошибок проверки, а не загрузки данных. И я использую адаптер json-api, как явно сказано в вопросе. –

+0

О, извини, я должен был прочитать его более тщательно. Может быть, JSON, который вы опубликовали, недействителен? Похоже, что закрытая квадратная скобка отсутствует. – TheCompiler

+0

О, это вопрос форматирования. Когда я разместил его в одной строке, я переформатировал его для удобства чтения. Это происходит от сервера с квадратной скобкой. –

0

Так что, похоже, не будет реализован. Я нашел любопытный хак способ сделать это в модели Mixin:

`import Ember from 'ember'` 

RelatedErrors = Ember.Mixin.create 

    save: -> 
    @_super().catch (resp) => 
     resp.errors.forEach (err) => 
     if [_, rel, idx, attr] = err.source.pointer.match /^data\/relationships\/(\w+)\/(\d+)\/data\/attributes\/(\w+)$/ 
      @get(rel).objectAt(idx).get('errors').add(attr, err.detail) 

`export default RelatedErrors` 

Однако add на DS.Errors является устаревшим, так что это еще не идеальным решением. Также недопустимое состояние связанных моделей должно быть очищено перед каждой фиксацией, чего не происходит до сих пор.

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