2014-06-18 27 views
0

我有一個表格使用:遠程=>真在導軌使用遠程表單時處理的MySQL錯誤

<%= 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

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

+0

Lovely..thanks很多。我一直在爲此苦苦掙扎 – Kim