如何确定给定URL字符串的Controller类

Joe*_*oel 6 ruby-on-rails

在Rails控制器或视图的范围内:如何查询Rails路由机制以将相对url字符串(例如"/ controllername/action/whatever")转换为负责处理该请求的控制器类?

我想做这样的事情:

controllerClass = someMethod("/controllername/action/whatever")
Run Code Online (Sandbox Code Playgroud)

contorllerClass是Class的一个实例.

我不想对路由约定做任何假设,例如.以上示例中的"controllername"始终是控制器的名称(因为它不是).

Joe*_*dor 12

在那里建造卡洛斯:

path = "/controllername/action/whatever"
c_name = ActionController::Routing::Routes.recognize_path(path)[:controller]
controllerClass = "#{c_name}_controller".camelize.constantize.new
Run Code Online (Sandbox Code Playgroud)

将为您提供控制器类的新实例.

  • 顺便说一句,现在位于`Rails.application.routes.recognize_path()`. (4认同)
  • 不适用于Rails 3.2.x :( (3认同)