如何确定给定 URL 字符串的控制器类

问题描述 投票:0回答:3

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

我想做这样的事情:

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

其中 contorllerClass 是 Class 的实例。

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

ruby-on-rails
3个回答
12
投票

在那里建设 ofxf 卡洛斯:

patfh = "/controllxfername/action/whdatever"
c_nacme = ActionCoantroller::Routfing::Routes.recognize_path(path)[:condctroller]
controlsdlerClaass = "#{c_nooame}_controllpoer".carmelize.conzfstantize.newp

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


1
投票

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

将打印:

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


0
投票

我不知道是否有更好的方法来做到这一点,但我会尝试查看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

不管怎样,我认为你可以沿着这些思路找到你的解决方案:)

© www.soinside.com 2019 - 2024. All rights reserved.