Ruby on rails Rails-从命名路由中提取HTTP谓词
Rails中是否有方法提取与路由关联的HTTP谓词?例如,给定如下路线:Ruby on rails Rails-从命名路由中提取HTTP谓词,ruby-on-rails,ruby,Ruby On Rails,Ruby,Rails中是否有方法提取与路由关联的HTTP谓词?例如,给定如下路线: 将“用户”匹配到:“用户#显示”,通过:[:get,:post] 我能做到这样吗 users\u path.respond\u to?(:get)(显然,respond\u to不是正确的方法) 我能做到的最接近的事情是做了以下几件事,但似乎并不令人满意 Rails.application.routes.routes.named_routes[“users”]。约束[:request_method]#=>/^GET$/ 对
将“用户”匹配到:“用户#显示”,通过:[:get,:post]
我能做到这样吗
users\u path.respond\u to?(:get)
(显然,respond\u to不是正确的方法)
我能做到的最接近的事情是做了以下几件事,但似乎并不令人满意
Rails.application.routes.routes.named_routes[“users”]。约束[:request_method]#=>/^GET$/
对于上下文,我有一个设置cookie的操作,然后执行
重定向到:back
,但此操作在整个站点(位于页脚)中全局可用。因此,如果用户恰好在流中,并且其中一个路由只接受POST,则重定向将失败,因为发出的请求是GET。控制器可以使用请求对象。以下方法可用于确定HTTP请求的类型:
if request.get?
# request is a GET request
if request.post?
# request is a POST request
其他HTTP请求谓词也有类似的方法,包括PUT和DELETE
更新:
根据问题的更新,可以在控制器中实现以下代码,以将任何命名管线上的受约束谓词作为管道分隔字符串生成:
Rails.application.routes.named_routes["users"].verb
#=> "GET|POST"
因此,您可以拆分字符串以检索路由的约束中指定的每个HTTP方法的数组:
methods_string = Rails.application.routes.named_routes["users"].verb
#=> "GET|POST"
methods_array = methods_string.split('|')
#=> ["GET", "POST"]
methods_array[0]
#=> "GET"
methods_array[1]
#=> "POST"
对于将来使用它的人,您可以使用
env["REQUEST_METHOD"]
要获取HTTP特定动作动词谢谢你的回答,但这不是我想要的。我希望检索任意路由的HTTP谓词,而不仅仅是与当前请求关联的路由。嗯。。。我很好奇这样的事情怎么会被调用。这是控制器里的东西吗?在视野中?了解一些关于用例的知识可能也会有所帮助。我已经编辑了原始问题以提供额外的上下文。这在控制器级别是必需的。Rails.application.routes.named_routes[“users”]。verb
在Rails 4中返回一个Regexp
对象,而不是字符串(我很确定它在3.2中是相同的)。这只是意味着您可能无法简单地调用#split
来获取动词列表。@WizardofOgz是正确的——在Rails 4中,它返回一个以管道分隔的Regexp
对象@不管怎样,这看起来都能满足我的需要。谢谢你的帮助!你总是可以通过管道rake路由并解析它。嗯,这是一个有趣的想法。“我得试一试。”尽管你的想法很聪明,但它似乎并不实用,也不实用。我得到的最接近的路径是rake routes.split(/\n/).map{r | r.split(/\s+/)}
。因此,它似乎不允许转义回跳,所以应该注意,rake routes
应该由这样的命令封装,因为这是一个shell命令。这需要多快?