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

时间:2009-06-29 07:15:37

标签: ruby-on-rails

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

我想做这样的事情:

controllerClass = someMethod("/controllername/action/whatever")

其中contorllerClass是Class的实例。

我不想对路由约定作出任何假设,例如。上例中的“controllername”始终是控制器的名称(因为它不是)。

3 个答案:

答案 0 :(得分:12)

在那里建造卡洛斯:

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

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

答案 1 :(得分:1)

ActionController::Routing::Routes.recognize_path "/your/path/here"

会打印:

{:controller=>"corresponding_controller", :action=>"corresponding_action" } # Plus any params if they are passed

答案 2 :(得分:0)

我不知道是否有更好的方法,但我会尝试查看Rails自己的代码。

路由类有一些用于测试的断言方法。 他们得到一个路径和预期的控制器并正确地断言它。

看起来应该给你一个良好的开端。

http://api.rubyonrails.org/classes/ActionController/Assertions/RoutingAssertions.html#M000598

特别是这一行

generated_path, extra_keys = ActionController::Routing::Routes.generate_extras(options, defaults)

希望有所帮助。

编辑:

看起来我向你指出了相反的例子。

你想要路径=> CONTROLER /动作

然后你应该看看

http://api.rubyonrails.org/classes/ActionController/Assertions/RoutingAssertions.html#M000597

我认为您可以通过以下方式找到解决方案:)