2013-09-26 43 views
2

我試圖通過使用mongoid和mongodb而不是普通數據庫的Michael Hartl的rails4教程。我到了必須設置用戶登錄和註銷的位置,這就是我遇到的問題。以下是我用來檢查用戶的電子郵件是否已註冊的代碼。rails 4.0通過mongoid處理空mongodb結果查詢

user = User.find_by(email: params[:session][:email].downcase) 
if user && user.authenticate(params[:session][:password]) 
    # sign in and load user page 
else 
    flash[:error] = 'Invalid email/password combination' 
    render 'new' 
    # error and re-render signin 
end 

不幸的是,我遇到了一個未找到的文檔,因爲這是查詢變爲空白時返回的內容。它應該進入其他的,但我得到一個軌道錯誤頁面,返回未找到的mongoid錯誤文檔。我該如何避免這種情況,並讓代碼執行else語句中的內容呢?

謝謝!

回答

5

Mongoid有raise_not_found_error設置選項,它強制mongoid在設置爲false時不會拋出上面提到的錯誤。有關更多詳細信息,請參見documentation page。所以,如果你想處理所有的Mongoid ::錯誤:: DocumentNotFound錯誤在你的應用程序手動只需添加這條線在你mongoid.yaml:

raise_not_found_error: false 

如果你想mongoid不提高錯誤只是在當前的行動您可以在find_by方法調用之後調用rescue,然後檢查用戶變量是否爲nilness:

user = User.find_by(email: params[:session][:email].downcase) rescue nil 
if !user.nil? && ... 
    ... 
else 
    ... 
end