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

Ruby on rails 在rails中使用远程表单时处理mysql错误,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我有一个使用:remote=>true的表单 <%= form_for @expression, url: {controller: "expressions", action: "create"}, :remote => true do |f| %> ... <% end %> 如果表单数据已成功保存在数据库中,则会正确显示警报消息。但是,如果由于某种原因(数据库约束--Mysql2::Error:Duplicate entry),无法保存数据,则不会发生

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

<%= form_for @expression, url: {controller: "expressions", action: "create"}, :remote => true  do |f| %>

...

<% end %>
如果表单数据已成功保存在数据库中,则会正确显示警报消息。但是,如果由于某种原因(数据库约束--Mysql2::Error:Duplicate entry),无法保存数据,则不会发生任何事情。不会显示警报消息

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


非常感谢你的帮助。谢谢您

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

我的示例只捕获该特定异常,但您可以使用
救援异常

捕获任何异常。非常感谢。我已经为此挣扎了一段时间
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