Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-从命名路由中提取HTTP谓词_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 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$/ 对

Rails中是否有方法提取与路由关联的HTTP谓词?例如,给定如下路线:

将“用户”匹配到:“用户#显示”,通过:[: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命令。这需要多快?