簡體   English   中英

你如何確定request.referrer是否匹配Rails的restful路徑?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM