当我们使用像 map.some_link这样的名字在 routes.rb中定义路由时,我们可以通过两种方式使用链接-some_link_url,some_link_path。
map.some_link
routes.rb
some_link_url
some_link_path
我也有同样的问题,我写了 在我的博客里有一篇关于这个的小文章
原因总结如下(我在一个论坛上找到的) :
* _ path 用于视图,因为 ahref 隐式链接到当前 URL。所以一遍又一遍地重复是浪费字节。但是,在控制器中,redirect _ to 需要 * _ URL,因为 HTTP 规范要求3xx 重定向中的 Location: Header 是一个完整的 URL。
下面是另一种解释 ,它说这取决于我们在从非 SSL 站点链接到 SSL 站点时是否需要使用绝对 URI,反之亦然。
到目前为止,我读到的并不意味着他们中的任何一个比另一个更安全。归根结底就是什么是“正确”的用法。
path是相对的,而 url是绝对的。
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助手生成一个包含应用程序根的相对路径的字符串,例如:
_url
_path
photos_url # => "http://www.example.com/photos" photos_path # => "/photos"
根据 铁路指南-路线。