当我们使用routes.rb
这样的名称定义map.some_link
中的路线。我们可以通过两种方式使用该链接 - some_link_url
,some_link_path
。
答案 0 :(得分:79)
我有同样的问题,我写了a small post about this in my blog
这里总结了原因(我在论坛上发现了这一点):
* _ path用于视图,因为ahrefs隐式链接到当前URL。所以一遍又一遍地重复它是浪费字节。但是,在控制器中,redirect_to需要* _url,因为HTTP规范要求3xx重定向中的Location:头是完整的URL。
Here is another explanation说它取决于我们是否需要在从非SSL站点链接到SSL站点时使用绝对URI,反之亦然。
到目前为止我所读过的内容并不表明它们中的任何一个比另一个更安全。这真的归结为什么是“适当的”使用。
答案 1 :(得分:76)
path
是相对的,而url
是绝对的。
答案 2 :(得分:35)
名为“user”的资源的差异示例:
users_url # => http://localhost:3000/users
users_path # => /users
答案 3 :(得分:2)
与佩特罗斯相同,但modern browsers handle relative redirects just fine除外。 (我会评论他的答案,但我还不能。)
答案 4 :(得分:1)
如果您不是要公开所有传递的数据,那么安全性就是_path更好,因为它会生成一个相对网址,比如'/ login',但_path会给'http://localhost:3000/login'。请参阅我在某个时候发现的关于相同的博客文章。 When _url is better than _path
答案 5 :(得分:1)
_url将给出整个路径。由于它包含域名和协议,您可以将其用于例如。发送电子邮件或重定向到其他域等
_path将返回没有域名,协议等的'/'之后的路径。所以你可以不时地使用它(我猜),你不需要域的详细信息。答案 6 :(得分:-1)
_url
助手生成一个包含整个URL的字符串,而_path
助手生成一个字符串,其中包含来自应用程序根目录的相对路径,例如:
photos_url # => "http://www.example.com/photos"
photos_path # => "/photos"