Search code examples
ember.jserror-handlingember-dataember-cli

Ember data Rest adapter error handling not working


I have a basic Ember app and I am trying to handle validation errors on save (model is using the REST Adapter). In my route I am doing:

task.save().then(
                function() {alert("success");},
                function() {alert("fail");}
                ).catch(
                    function() {alert("catch error");}
                    );

When the record is valid I get the "success" alert, but when record is invalid, I do not get the "fail" alert OR "catch error". In the console I get:

POST http://localhost:8080/api/tasks 422 (Unprocessable Entity)
Error: The adapter rejected the commit because it was invalid

The response from the api look like this:

{"errors":{"name":["can't be blank"],"parent_task":[]}}

I am using Ember Data 1.13.


Solution

  • You need to extend your adapter to handle the errors, the REST Adapter does NOT do this for you (only the Active Model one)

    Something like this:

    App.ApplicationAdapter = DS.RESTAdapter.extend({
    
      ajaxError: function(jqXHR) {
        var error = this._super(jqXHR);
        if (jqXHR && jqXHR.status === 422) {
          var response = Ember.$.parseJSON(jqXHR.responseText),
              errors = {};
    
          if (response.errors !== undefined) {
            var jsonErrors = response.errors;
            Ember.EnumerableUtils.forEach(Ember.keys(jsonErrors), function(key) {
              errors[Ember.String.camelize(key)] = jsonErrors[key];
            });
          }
          return new DS.InvalidError(errors);
        } else {
          return error;
        }
      }
    });