4
votes

I'm having trouble handling server side validations with Ember and Ember Data.

When a validation error occurs, the API returns the code 422. Ember data then triggers the becameInvalid callback on the model.

From here, I'm not sure what's the best way to handle the errors I'm getting, and how to make them bubble up to the view.

App.Challenge = DS.Model.extend Ember.Validations,
    title: attr('string')
    summary: attr('string')
    # other attributes

    becameInvalid: (errors) ->
        # is it the place where I should handle the errors?
        # how would I make the errors bubble up to the view here?

I have 2 issues.

  • I'm not sure if becameInvalid is the place to handle the errors, and if it is, how to make the errors display in the view
  • In becameInvalid, @get('isValid') returns true, which doesn't make sense to me.
1

1 Answers

2
votes

is it the place where I should handle the errors?

Yes. But you might not need to do anything at all. Ember-data expects your api to have included any validation errors in it's json response. That errors object is passed to the becameInvalid hook and also saved as a property errors on the model. So if all you want to do is display the errors in your view, it might be enough to do something like:

{{input value=firstName}}<p class="inline-help">{{errors.firstName}}</p>

See: https://github.com/emberjs/data/blob/master/packages/ember-data/lib/serializers/rest_serializer.js#L50-L61

In becameInvalid, @get('isValid') returns true, which doesn't make sense to me

Agreed that's weird. I think it's a bindings thing, like the becameInvalid hook is running before bindings have updated.