我正在尝试创建一条记录,而在服务器端我正在使用rails。 rails验证失败,我返回422状态代码但是当我在becomeInvalid回调中删除它时,它不会从模板中删除。它只显示一个空白条目。
当它等待服务器加载时,它只显示名称,这是预期的。
Ember型号代码
App.Job = DS.Model.extend({
name : DS.attr("string"),
user : DS.belongsTo("App.User", {embedded : "load"}),
plans : DS.hasMany("App.Plan", {embedded : "load"}),
shares : DS.hasMany("App.Share", {embedded : "load"}),
becameInvalid : function(data){
this.deleteRecord();
}
});
灰烬控制器调用
PlanSource.Job.createRecord({"name" : name});
job.save();
Rails创建方法
def create
if can? :create, Job
@job = Job.new(name: params["job"]["name"], user_id: current_user.id)
if !@job.save
render :json => {job: @job}, status: :unprocessable_entity
return
end
if
render :json => {:job => @job}, include: [:plans, :user, :shares => {except: :token, include: [:user, :job]}]
else
render_no_permission
end
else
render_no_permission
end
end
我的问题是处理服务器端验证错误的最佳方法是什么。我不想尝试重新提交记录,我只是想删除它。我正在寻找一些让Ember等待服务器响应的东西但却一无所获。
此方法无法正常工作,因为它会在删除后导致模型管道中出现未定义的错误。
答案 0 :(得分:2)
我的问题是处理服务器端验证错误的最佳方法是什么。
不确定有一种最好的方法。取决于您希望在UI中发生的事情。通常,您会希望让用户知道记录未保存,并提供一些错误信息。
我不想尝试重新提交记录,我只是想删除它。
行。如果记录是新的,删除实际上没有意义,但您可能想要做的是回滚事务?试试this.transaction.rollback()
或this.rollback()
。例如:
App.Job = DS.Model.extend({
name : DS.attr("string"),
user : DS.belongsTo("App.User", {embedded : "load"}),
plans : DS.hasMany("App.Plan", {embedded : "load"}),
shares : DS.hasMany("App.Share", {embedded : "load"}),
becameInvalid : function(data){
this.transaction.rollback();
}
});
请参阅:How to deleteRecord when it was never committed on the backend?
我正在寻找让Ember等待服务器响应的东西,但什么也没找到。
model.save()
返回一个承诺。这意味着你可以像这样添加成功/失败处理程序:
PlanSource.Job.createRecord({"name" : name});
var success = function(model) {
alert('ok');
};
var failure = function(model) {
alert('fail');
};
job.save().then(success, failure);