Ember和Rails,处理后端错误

时间:2014-06-03 17:02:28

标签: ruby-on-rails ember.js

我试图在我的Ember / Rails应用中添加一些后端验证。所以,阅读我能找到的所有帖子,我做了以下几点:

在我的Rails模型中,我添加了validates_presence_of和validates_uniqueness_of条目。

在Rails控制器中,我有一个在尝试保存后调用的方法:

def validate(permission)
  if permission.valid?
    render json: permission
  else
    render json: {errors: permission.errors}, status: :unprocessable_entity
  end
end

在Ember路线中,我有以下内容:

actions: {
  create: function(permission){
    var route = this;

    permission.save().then(function(){
      route.transitionTo('permissions');
    });
  }
}

当从后端返回任何错误时,我得到的只是控制台上的一条消息:

Error: Assertion Failed: Error: The backend rejected the commit because it was
invalid: {name: can't be blank, description: can't be blank}

"InvalidError@http://127.0.0.1/assets/ember-data.js?body=1:3512
ActiveModelAdapter<.ajaxError@http://127.0.0.1/assets/ember-data.js?body=1:235
superWrapper@http://127.0.0.1/assets/ember.js?body=1:1295
RESTAdapter<.ajax/</hash.error@http://127.0.0.1/assets/ember-data.js?body=1:1530
jQuery.Callbacks/fire@http://127.0.0.1/assets/jquery.js?body=1:3100
jQuery.Callbacks/self.fireWith@http://127.0.0.1/assets/jquery.js?body=1:3212
done@http://127.0.0.1/assets/jquery.js?body=1:9313
.send/callback@http://127.0.0.1/assets/jquery.js?body=1:9721
"

我的模板中有以下内容:

{{#if isError}}
  <p>There was an error saving the record</p>
{{/if}}
{{#each error in errors.name}}
  <p>{{error.message}}</p>
{{/each}}
{{#each error in errors.description}}
  <p>{{error.message}}</p>
{{/each}}

但是,页面上没有显示任何内容,只显示控制台日志中的断言错误。

我不确定我在这里失踪了什么。

1 个答案:

答案 0 :(得分:3)

您需要处理save的失败状态 - 承诺防止Ember Data将故障冒泡到控制台。

permission.save().then(function(){
  route.transitionTo('permissions');
}, function() {
  // Couldn't save, do nothing about it.
});

这应该可以防止断言错误阻止执行并允许Ember Data发挥其魔力,将后端返回的错误添加到模型实例中。