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

Zac*_* Xu 13 ruby-on-rails

正如我们从这篇文章中所知,在Rails中,您可以通过调用获取前一个URL

request.referrer
Run Code Online (Sandbox Code Playgroud)

但是,如何检查前一个URL是否与Rails应用程序中的其余路径匹配?

通过宁静的路径,我指的是Rails提供的路径,例如,

books_path
book_path(book)
edit_book_path(book)
Run Code Online (Sandbox Code Playgroud)

当然我可以在request.referrer上做一个正则表达式字符串匹配,但我觉得它有点难看.

在我的应用程序中,一个特殊情况是request.referrer可以是"localhost:3000/books?page = 4"

我想要它匹配

books_path
Run Code Online (Sandbox Code Playgroud)

返回"/ books"

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

谢谢

PS我试过正则表达式字符串匹配,它的工作原理.我只是觉得在Rails中可能有更好的方法.

vee*_*vee 17

您可以request.referer使用以下内容提取路径部分:

URI(request.referer).path
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用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"}
Run Code Online (Sandbox Code Playgroud)

  • 好.对替代品的任何建议? (5认同)