Class InvalidError
publicA InvalidError
is used by an adapter to signal the external API
was unable to process a request because the content was not
semantically correct or meaningful per the API. Usually, this means a
record failed some form of server-side validation. When a promise
from an adapter is rejected with a InvalidError
the record will
transition to the invalid
state and the errors will be set to the
errors
property on the record.
For Ember Data to correctly map errors to their corresponding
properties on the model, Ember Data expects each error to be
a valid JSON-API error object with a source/pointer
that matches
the property name. For example, if you had a Post model that
looked like this.
import Model, { attr } from '@ember-data/model';
export default class PostModel extends Model {
@attr('string') title;
@attr('string') content;
}
To show an error from the server related to the title
and
content
properties your adapter could return a promise that
rejects with a InvalidError
object that looks like this:
import RSVP from 'RSVP';
import RESTAdapter from '@ember-data/adapter/rest';
import { InvalidError } from '@ember-data/adapter/error';
export default class ApplicationAdapter extends RESTAdapter {
updateRecord() {
// Fictional adapter that always rejects
return RSVP.reject(new InvalidError([
{
detail: 'Must be unique',
source: { pointer: '/data/attributes/title' }
},
{
detail: 'Must not be blank',
source: { pointer: '/data/attributes/content'}
}
]));
}
}
Your backend may use different property names for your records the
store will attempt to extract and normalize the errors using the
serializer's extractErrors
method before the errors get added to
the model. As a result, it is safe for the InvalidError
to
wrap the error payload unaltered.