在rails中使用远程表单时处理mysql错误

时间:2014-06-18 12:36:42

标签: ruby-on-rails ruby-on-rails-3.2

我有一个表单使用:remote =>真

<%= 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 ::错误:重复条目),数据无法保存,没有任何反应。警报消息不会显示。

使用远程表单时有没有办法处理mysql错误?

非常感谢您的帮助。谢谢

1 个答案:

答案 0 :(得分:1)

Mysql2::Error: Duplicate是一个例外,不是ActiveRecord验证错误。您可以通过捕获异常来处理它,I.E:

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

捕获任何异常