Ember.js / Rails / Devise - 处理来自服务器的验证错误

时间:2013-12-25 07:36:57

标签: ruby-on-rails ember.js devise

Hiyo

我很贪图 - 正在构建Ember前端,Rails使用Devise进行身份验证。试图在客户端上显示服务器端错误...

我已经阅读了很多有关此事的内容,但似乎没有任何效果。

登录页面位于/ sessions / new

会话新模板(Emblem.js)

Ember.TextField valueBinding="email" placeholder="Email" type="text"
= errors.email

会话新路线

SiloStore.SessionsNewRoute = Ember.Route.extend

  model: -> @store.createRecord('session')

  setupController: (controller, model) ->
    controller.set('content', model)

会话新控制器

SiloStore.SessionsNewController = Ember.ObjectController.extend

  needs: ['admin']

  actions:{
    logIn: ->
      self = @
      content = @content

      @content.save().then(->
        self.get('controllers.admin').set('content', content);
        self.transitionToRoute 'admin.dashboard'
      )
  }

会话控制器(Rails)

render json: {
  errors: {
    email: ["invalid email or password"]
  }
}, status: :unprocessable_entity

控制台中Rails服务器的JSON错误

{"errors":{"email":["invalidemailorpassword"]}}

现在我的模板中的Ember.TextField显示错误而不是我的错误 - 我收到一个大丑红色错误,如下所示:

POST http://dev.siloarts.net:3000/api/v1/sessions 422 (Unprocessable Entity)
Error: The backend rejected the commit because it was invalid: {email: invalid email or password}

任何想法?我确定这是一件蠢事......

哦,哦,哦,这是我的调试信息:

DEBUG: ------------------------------- 
DEBUG: Ember      : 1.4.0-beta.1+canary.011b67b8 
DEBUG: Ember Data : 1.0.0-beta.5+canary.d9ce2a53 
DEBUG: Handlebars : 1.1.2 
DEBUG: jQuery     : 1.10.2 
DEBUG: ------------------------------- 

谢谢你提前爱上了

2 个答案:

答案 0 :(得分:1)

此错误还会阻止错误结构绑定。您可以通过以下方式修复/修补:始终在需要保存时调用person.save().catch(->)。这将捕获错误并注意到,但仍然可以在模型上使用becameError:becameInvalid,或者只是自己实现该功能。您还可以按如下方式更改模型类:

App.Model =  DS.Model.extend
  save: (catchErr=true) ->
    if catchErr
      fail = ->
        console.log('Save failed')
      retutn @_super().catch(fail)
    @_super()

比更改Person对象的基本callas

App.Person =  App.Model.extend 
...   

然后当你需要使用真正的捕获时person.save(false).catch(fn)

答案 1 :(得分:0)

升级后我遇到了同样的错误。降级到Ember 1.2.0应解决您的问题:)