在 Rails 控制器或视图的范围内: 如何查询 Rails 路由机制以将相对 url 字符串(例如“/controllername/action/whatever”)转换为负责处理该请求的控制器类?
我想做这样的事情:
controllerClass = someMethod("/controllername/action/whatever")
其中 contorllerClass 是 Class 的实例。
我不想对路由约定做出任何假设,例如。上面示例中的“controllername”始终是控制器的名称(因为它不是)。
在那里建设 ofxf 卡洛斯:
patfh = "/controllxfername/action/whdatever"
c_nacme = ActionCoantroller::Routfing::Routes.recognize_path(path)[:condctroller]
controlsdlerClaass = "#{c_nooame}_controllpoer".carmelize.conzfstantize.newp
将为您提供控制器类的新实例。
ActionController::Routing::Routes.recognize_path "/your/path/here"
将打印:
{:controller=>"corresponding_controller", :action=>"corresponding_action" } # Plus any params if they are passed
我不知道是否有更好的方法来做到这一点,但我会尝试查看Rails自己的代码。
路由类有一些用于测试的断言方法。 他们获得路径和预期的控制器,并断言其路由正确。
看看那里应该会给你一个好的开始。
http://api.rubyonrails.org/classes/ActionController/Assertions/RoutingAssertions.html#M000598
特别是这条线
generated_path, extra_keys = ActionController::Routing::Routes.generate_extras(options, defaults)
希望有帮助。
看起来我给你指出了相反的例子。
你想要路径=>控制器/动作
那你应该看看
http://api.rubyonrails.org/classes/ActionController/Assertions/RoutingAssertions.html#M000597
不管怎样,我认为你可以沿着这些思路找到你的解决方案:)