2015-09-20 72 views
2

在我的Rails 3應用程序,我通過獲取PATH_INFO:救援LoadError在Rails應用程序

Rails.application.routes.recognize_path(url, { :method => request.request_method }) rescue {} 

如果一個履帶式命中像 「http://localhost:3000/admin_」 一個網址,上面的代碼中引發了以下錯誤:

LoadError: Expected /Users/user/myRailsApp/app/controllers/admin_controller.rb to define Admin_Controller 
from /Users/user/.rvm/gems/ree-1.8.7-2012.02/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:492:in `load_missing_constant' 

我有兩個問題:

  1. 爲什麼rescue不工作?如果我將其更改爲rescue LoadError => e,則會優雅地處理異常。
  2. 有沒有其他的選擇,而不是拯救這樣的例外?

回答

1

如果您省略例外類型,則默認rescue將僅拯救StandardError例外和子類。

LoadError不從StandardError繼承:

LoadError.ancestors 
=> [LoadError, ScriptError, Exception, Object, Kernel, BasicObject] 

因此,單行救援模式不具有LoadError工作。

+0

謝謝。它回答了第一個問題。第二個呢?有沒有其他辦法來處理這樣的網址? –

+0

我不明白你爲什麼以這種方式獲取路徑信息,而是使用'request.env ['PATH_INFO']' –

+0

'Rails.application.routes.recognize_path'給了我一個'controller'和'action'的hash鍵。我需要這個哈希來做一些進一步的處理。這甚至適用於自定義路線。 'request.env ['PATH_INFO']'不會給我。 –