home
  • Blog
  • Home
  • Projects
    • Ember
    • EmberData
    • Ember CLI
1.13
  • Packages
    • ember-data
  • Namespaces
    • DS
    • Ember.Date
  • Classes
    • DS.AbortError
    • DS.ActiveModelAdapter
    • DS.ActiveModelSerializer
    • DS.Adapter
    • DS.AdapterError
    • DS.AdapterPopulatedRecordArray
    • DS.BooleanTransform
    • DS.BuildURLMixin
    • DS.DateTransform
    • DS.EmbeddedRecordsMixin
    • DS.Errors
    • DS.FilteredRecordArray
    • DS.FixtureAdapter
    • DS.InternalModel
    • DS.InvalidError
    • DS.JSONAPIAdapter
    • DS.JSONAPISerializer
    • DS.JSONSerializer
    • DS.ManyArray
    • DS.Model
    • DS.NumberTransform
    • DS.PromiseArray
    • DS.PromiseManyArray
    • DS.PromiseObject
    • DS.RESTAdapter
    • DS.RESTSerializer
    • DS.RecordArray
    • DS.RootState
    • DS.Serializer
    • DS.Store
    • DS.StringTransform
    • DS.TimeoutError
    • DS.Transform

Class DS.InvalidError


Defined in: packages/ember-data/lib/adapters/errors.js:31
Module: ember-data

A DS.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 DS.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.

app/models/post.js
import DS from 'ember-data';

export default DS.Model.extend({
  title: DS.attr('string'),
  content: DS.attr('string')
});

To show an error from the server related to the title and content properties your adapter could return a promise that rejects with a DS.InvalidError object that looks like this:

app/adapters/post.js
import Ember from 'ember';
import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  updateRecord: function() {
    // Fictional adapter that always rejects
    return Ember.RSVP.reject(new DS.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 extract and normalize the errors using the serializer's extractErrors method before the errors get added to the the model. As a result, it is safe for the InvalidError to wrap the error payload unaltered.


On this page

Team Sponsors Security Legal Branding Community Guidelines
Twitter GitHub Discord Mastodon

If you want help you can contact us by email, open an issue, or get realtime help by joining the Ember Discord.

© Copyright 2025 - Tilde Inc.
Ember.js is free, open source and always will be.


Ember is generously supported by
blue Created with Sketch.