![](/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.