2013-05-22 80 views
0

如何防止ActiveRecord查詢未返回結果時我的控制器發生錯誤?處理ActiveRecord結果 - 找不到記錄

ActiveRecord::RecordNotFound in PasswordResetsController#edit 
Couldn't find User with password_reset_token = rqZEGQUH54390Pg-AUC5Q 

我以爲「!」符號會產生一個404,但至少在開發中,它會在瀏覽器中顯示錯誤跟蹤。

如果查詢不返回任何內容,下面的這個方法是否會在生產中生成404?

如果不是,我該如何解決?

感謝

def edit 
     @user = user.find_by_password_reset_token!(params[:id]) 
    end 

回答

2

隨着rescue條款:

def edit 
    @user = user.find_by_password_reset_token!(params[:id]) 
rescue ActiveRecord::RecordNotFound => e 
    # Do something with error, 'e' 
end 

或在控制器rescue_from(可以跨多個操作重複使用:

rescue_from ActiveRecord::RecordNotFound, with: lambda do |e| 
    # Do something with error, 'e' 
end 

def edit 
    @user = user.find_by_password_reset_token!(params[:id]) 
end 

在回答你的其他問題,它會在生產中給出一個HTTP 404錯誤,但它會失敗我不顯示堆棧跟蹤。默認情況下,它顯示一個非常基本的錯誤頁面,說明出現了問題。

+0

完美。謝謝,喬納森 – Slinky

+0

@Slinky沒問題。如果它有幫助,你會考慮接受它作爲答案嗎? –

+0

我試圖接受,但不得不等待5分鐘..現在好了。 – Slinky

0

嘗試:

class PasswordResetsController 
    def edit 
    ... 
    begin 
     @user = user.find_by_password_reset_token!(params[:id]) 

    rescue ActiveRecord::RecordNotFound 
     redirect_to :controller => "{Your Controller}", :action => "{Your Action}" 
     return 
    end 
    end 
    end