![](/img/trans.png)
[英]How to save the request.referrer for facebook omniauth in Rails 4
[英]how do you determine if request.referrer matches a Rails restful path?
正如我们从这篇文章中所知,在Rails中,您可以通过调用获取前一个URL
request.referrer
但是,如何检查前一个URL是否与Rails应用程序中的其余路径匹配?
通过宁静的路径,我指的是Rails提供的路径,例如,
books_path
book_path(book)
edit_book_path(book)
当然我可以在request.referrer上做一个正则表达式字符串匹配,但我觉得它有点难看。
在我的应用程序中,一个特殊情况是request.referrer可以是“localhost:3000 / books?page = 4”
我想要它匹配
books_path
返回“/ books”
在这种情况下,如何在不进行正则表达式字符串匹配的情况下检查是否存在匹配? (如果这是可能的话)
谢谢
PS我试过正则表达式字符串匹配,它的工作原理。 我只是觉得在Rails中可能有更好的方法。
您可以使用以下方法提取request.referer
的路径部分:
URI(request.referer).path
然后,您可以使用Rails.application.routes.recognize_path
检查路径是否映射到控制器和操作,例如:
my_path = URI(request.referer).path
# => /books
Rails.application.routes.recognize_path(my_path)
# => {:action=>"show", :controller=>"books", :page=>"4"}
虽然不确定你想要做什么,但相当确定rails支持更好的控制重定向的方法。 不过,我想这就是你要找的东西:
request.referer == books_url(page: params[:page])
更新:
这样,即使没有参数[:page]。 这仍然可以正常工作。
由于recognize_path
被废弃,这是做的另一种方式:
使用as
关键字在路由配置中命名您的路由:
get 'foo/bar' => 'foo#bar', as: :foo_bar
然后你可以像这样检查:
if URI(request.referer).path == foo_bar_path
do_something()
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.