我在我的应用中的页面上进行了就地编辑(使用Rails 2.3.5和jQuery)。我想知道更新失败时如何在页面上显示错误。
我正在使用ajax(XMLHttpRequest)来保存对Comment对象的更新。控制器有一个像这样的更新方法:
def update
@comment = Comment.find(params[:id])
respond_to do |format|
# if @comment.update_attributes!(params[:comment])
if false #deliberately forcing a fail here to see what happens
format.json { render :nothing => true }
else
format.json { render :json => @comment.errors, :status => :unprocessable_entity }
end
end
end
在Firebug中,我可以看到服务器返回“422”(相应的验证错误状态代码)。但它是对XMLHttpRequest的响应,因此没有重定向到错误页面。
我想我其实想要这样做:
format.json { render :json => @comment.errors}
或者这个:
format.json {render :json => { :status => :error, :message => "Could not be saved" }.to_json, :status => 400 }
并触发一些迭代(并显示)任何错误的Javascript函数。
我正在使用rails插件REST in Place来实现就地编辑。它似乎没有任何回调函数来处理故障。我有什么选择?我可以编写一些Javascript来响应失败情况而不破解插件吗?我是否必须破解rest_in_place插件来处理故障情况?是否有更好的插件(对于Rails或jQuery)处理就地编辑,包括失败条件?
更新
Peter Bui Standard JSON Response for Rails and jQuery的这篇文章有助于展示如何使用XMLHttpRequest.status
处理来自服务器的错误消息。我使用ajax paydro-talks查看了他对博客的实现。我对处理简单错误条件所需的复杂性感到惊讶。通常Rails已经融入了所有的优点,但似乎JSON的服务器错误超出了范围。可以吗?
我还看了一下grimen的validatious-on-rails,当使用ajax XMLHttpRequest时,它适应模型验证。我不清楚如何使用它来处理验证成功时“保存”失败的一般情况。
答案 0 :(得分:1)
我认为你最好的选择可能只是在这种情况下破解插件,因为插件没有错误处理程序真的很愚蠢。提示:也许告诉插件的作者,处理错误会很好,很有用(如果连接失败或者什么?插件永远不会知道,对用户没有反馈)。
如果您在成功选项
之后在jquery.rest_in_place.js
的第33行附近添加类似的内容就足够了
"error": function(xhr, state, error) {
//do error handling here e.g.
alert(state);
//or $.parseJSON(xhr.responseText) and whatever or similar
}