我有一个表单使用:remote => true
<%= form_for @expression, url: {controller: "expressions", action: "create"}, :remote => true do |f| %>
...
<% end %>
在我的控制器代码中,我绑定以显示一条警告消息,以指示表单数据是否已保存。
def create
@expression = Expression.new(params[:expression])
respond_to do |format|
if @expression.save
format.js { render :js => "alert('Expression details have been saved'); window.opener.document.location.reload(true); window.close();" }
else
format.js { render :js => "alert('Error. Please ensure that expression patterns are unique');" }
end
end
end
如果表单数据已成功保存在数据库中,则将正确显示警报消息。但是,如果由于某种原因(数据库约束-- Mysql2 2::Error: reason )无法保存数据,则不会发生任何事情。未显示警报消息。
在使用远程表单时,有处理mysql错误的方法吗?
非常感谢你的帮助。谢谢
发布于 2014-06-18 04:47:57
Mysql2::Error: Duplicate
是一个异常,而不是ActiveRecord验证错误。您可以通过捕获异常来处理它,即:
def create
@expression = Expression.new(params[:expression])
respond_to do |format|
if @expression.save
format.js { render :js => "alert('Expression details have been saved'); window.opener.document.location.reload(true); window.close();" }
else
format.js { render :js => "alert('Error. Please ensure that expression patterns are unique');" }
end
end
rescue ActiveRecord::RecordNotUnique
respond_to do |format|
format.js { render :js => "alert('Error..');" }
end
end
我的示例只捕捉到那个特定的异常,但是您可以用rescue Exception
捕获任何异常。
https://stackoverflow.com/questions/24285794
复制