Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 如何确定request.referer是否与Rails restful路径匹配?_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何确定request.referer是否与Rails restful路径匹配?

Ruby on rails 如何确定request.referer是否与Rails restful路径匹配?,ruby-on-rails,Ruby On Rails,如我们所知,在Rails中,您可以通过调用 request.referrer 但是如何检查前面的url是否与中的一个restful路径匹配 你的Rails应用程序 所谓restful路径,我指的是Rails提供的路径,例如 books_path book_path(book) edit_book_path(book) 当然,我可以根据请求进行正则表达式字符串匹配。referer,但我认为这有点难看 在我的申请中,有一个特殊的情况,那就是请求。推荐人可以是 “本地主机:3000/本书?第4页”

如我们所知,在Rails中,您可以通过调用

request.referrer
但是如何检查前面的url是否与中的一个restful路径匹配 你的Rails应用程序

所谓restful路径,我指的是Rails提供的路径,例如

books_path
book_path(book)
edit_book_path(book)
当然,我可以根据请求进行正则表达式字符串匹配。referer,但我认为这有点难看

在我的申请中,有一个特殊的情况,那就是请求。推荐人可以是 “本地主机:3000/本书?第4页”

我想让它匹配

books_path
返回“/书籍”

在这种情况下,如何在不使用正则表达式字符串的情况下检查是否存在匹配 比赛?(如果可能的话)

谢谢


另外,我已经尝试过正则表达式字符串匹配,它很有效。我只是想在Rails中可能有更好的方法。

虽然不确定您想用它做什么,但可以肯定Rails支持更好的控制重定向的方法。然而,我想这就是你想要的:

request.referer==books\u url(page:params[:page])

更新:


这样,即使没有参数[:page]。这仍然可以正常工作。

您可以使用以下命令提取
请求的路径部分。referer

URI(request.referer).path
然后,您可以使用
Rails.application.routes.recognizer\u path
检查路径是否映射到控制器和操作,例如:

my_path = URI(request.referer).path 
# => /books

Rails.application.routes.recognize_path(my_path)
# => {:action=>"show", :controller=>"books", :page=>"4"}

由于不推荐使用
recognize\u path
,这是另一种方法:

在路线配置中使用
as
关键字命名路线:

get 'foo/bar' => 'foo#bar', as: :foo_bar
然后你可以这样做检查:

if URI(request.referer).path == foo_bar_path
  do_something()
end

为什么你不能检查推荐人的域部分,看看它是否来自内部/外部url?如果是内部的,那么它将是在你的应用程序中定义的路线,如果不是,它不会。@varatis,我认为你不理解我的问题。检查url的域非常简单。我想知道前面的url是否匹配书籍的“索引”路径(在我的示例中)。如果你只看一条路径,使用正则表达式或字符串比较似乎是最简单的。谢谢你的回答。但是,第4页只是一个示例,它可能是第7页,也可能根本不包含page param。所以很明显,硬编码第4页不是我想要的。我想,但这只是一个例子。您可以使用
request.referer==books\u url(page:params[:page])
,这样,即使没有params[:page],也可以按预期工作。试一试。警告:
recognize\u path
方法已弃用。确定。对替代品有什么建议吗?还要注意,它不会运行约束,因此可能会返回误报。