2013-07-08 81 views
1

我按照http://ariejan.net/2011/10/14/rails-3-customized-exception-handling/的指示操作,並遇到了路障。導軌,自定義例外

我比較新的鐵軌,所以我不知道我做了什麼正確/不那麼正確。

的第一步是創建類

MyApp::ProfileNotFoundError < StandardError 
end 

所以我去了應用程序/模型和創建profile_not_found.rb包含以下內容,其中(APP)是Rails的定義我的應用程序的名稱。 application.class.parent_name,但我隱藏了這篇文章的安全/隱私。

(APP)::ProfileNotFoundError < StandardError 
end 

在應用程序/控制器/ application_controller.rb我加

rescue_from (APP)::ProfileNotFoundError, :with => :profile_not_found 

,在我登錄控制器我加

raise (APP)::ProfileNotFoundError if @profile.nil? 

然而,當我嘗試測試代碼,我得到路由錯誤,說明

uninitialized constant (APP)::BlankUsernameError 

在我看來,這表明我做了有關類創建的錯誤,但教程太模糊了,我無法弄清楚。任何指針?

我在Ubuntu 12.04.2 x86_64的運行Rails的3.0.20 &的Ruby 1.8.7

回答

6

你有你的類定義的class關鍵字?

class MyApp::ProfileNotFoundError < StandardError 
end 

其次,你必須在那裏你用它來requireexceptions。這可能是您遇到uninitialized constant錯誤時遇到的問題。要做到這一點,你可能要它包裝到一個模塊中:

module Exceptions 
    class MyApp::ProfileNotFoundError < StandardError 
    end 
end 

此外,你應該把你的錯誤類在不同的目錄/models。該目錄應該明確用於您的模型。也許可以製作一個像/errors

+0

'class'在那裏,當然,但我認爲'包括'修復它!謝謝。 Sage建議與/ errors目錄,我很感激它。 – Crash

+0

@Crash點擊勾號將其標記爲已回答 – varatis

+0

我可能說得太快了 - '包括'實際上以不同的方式破壞了它。當我使用'include(APP):: ProfileNotFoundError'時,我得到'錯誤參數類型類(預期模塊)'。我試圖將其更改爲'包含ProfileNotFoundError',並且我得到'預期.../app/errors/profile_not_found_error.rb來定義ProfileNotFoundError'。奇怪的是,如果我刪除'包括'並嘗試它,我會得到相同的錯誤,區別在於,如果我點擊刷新,它會按預期加載頁面和錯誤函數。我之前沒有得到錯誤,因爲它似乎只發生在服務器init上。 – Crash