2015-09-20 47 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']'不会给我。 –