在 Rail 中使用路由时_url 和_path 之间的区别是什么

当我们使用像 map.some_link这样的名字在 routes.rb中定义路由时,我们可以通过两种方式使用链接-some_link_urlsome_link_path

  • 这两者有什么不同?
  • 使用哪一个更安全?
29819 次浏览

我也有同样的问题,我写了 在我的博客里有一篇关于这个的小文章

原因总结如下(我在一个论坛上找到的) :

* _ path 用于视图,因为 ahref 隐式链接到当前 URL。所以一遍又一遍地重复是浪费字节。但是,在控制器中,redirect _ to 需要 * _ URL,因为 HTTP 规范要求3xx 重定向中的 Location: Header 是一个完整的 URL。

下面是另一种解释 ,它说这取决于我们在从非 SSL 站点链接到 SSL 站点时是否需要使用绝对 URI,反之亦然。

到目前为止,我读到的并不意味着他们中的任何一个比另一个更安全。归根结底就是什么是“正确”的用法。

path是相对的,而 url是绝对的。

如果您的意思是不公开所有传递的数据,那么 _ path 更好,因为它会生成一个相对的 url,类似于“/login”但是 _ path 会给出“ http://localhost:3000/login”。请参考这个博客帖子,我发现一些时候回来关于相同的。当 _ url 优于 _ path 时

一个名为“ user”的资源的差异示例:

users_url # => http://localhost:3000/users
users_path  # => /users

和彼得罗斯的答案一样,除了 现代浏览器能够很好地处理相对重定向。(我想评论他的答案,但我还不能。)

_ url 将给出整个路径。由于它包含域名和协议,您可以使用它,例如发送电子邮件或重定向到另一个域等。

_ path 将返回“/”之后的路径,没有域、协议等。所以你可以时不时地使用它(我想) ,在那里你不需要域的细节。

_url助手生成一个包含整个 URL 的字符串,而 _path助手生成一个包含应用程序根的相对路径的字符串,例如:

photos_url  # => "http://www.example.com/photos"
photos_path # => "/photos"

根据 铁路指南-路线