我试图在我的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}}
但是,页面上没有显示任何内容,只显示控制台日志中的断言错误。
我不确定我在这里失踪了什么。
答案 0 :(得分:3)
您需要处理save
的失败状态 - 承诺防止Ember Data将故障冒泡到控制台。
permission.save().then(function(){
route.transitionTo('permissions');
}, function() {
// Couldn't save, do nothing about it.
});
这应该可以防止断言错误阻止执行并允许Ember Data发挥其魔力,将后端返回的错误添加到模型实例中。