在Rails控制器或视图的范围内: 如何查询Rails路由机制以将相对url字符串(例如“/ controllername / action / whatever”)转换为负责处理该请求的控制器类?
我想做这样的事情:
controllerClass = someMethod("/controllername/action/whatever")
其中contorllerClass是Class的实例。
我不想对路由约定作出任何假设,例如。上例中的“controllername”始终是控制器的名称(因为它不是)。
答案 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
我认为您可以通过以下方式找到解决方案:)