Ruby on rails 如何确定request.referer是否与Rails restful路径匹配?
如我们所知,在Rails中,您可以通过调用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页”
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
方法已弃用。确定。对替代品有什么建议吗?还要注意,它不会运行约束,因此可能会返回误报。