【发布时间】:2011-01-21 23:22:37
【问题描述】:
当我们在routes.rb 中使用map.some_link 之类的名称定义路由时。我们可以通过两种方式使用链接-some_link_url、some_link_path。
- 两者有什么区别?
- 使用哪个更安全?
【问题讨论】:
标签: ruby-on-rails routes
当我们在routes.rb 中使用map.some_link 之类的名称定义路由时。我们可以通过两种方式使用链接-some_link_url、some_link_path。
【问题讨论】:
标签: ruby-on-rails routes
我有同样的问题,我写了a small post about this in my blog
原因总结在这里(我在论坛上找到的):
*_path 用于视图,因为 ahref 隐式链接到当前 URL。所以一遍又一遍地重复它会浪费字节。但是,在控制器中,redirect_to 需要 *_url,因为 HTTP 规范要求 3xx 重定向中的 Location: 标头是完整的 URL。
Here is another explanation 表示这取决于我们在从非 SSL 站点链接到 SSL 站点时是否需要使用绝对 URI,反之亦然。
到目前为止,我所阅读的内容并不表明它们中的任何一个都比另一个更安全。这真的归结为“正确”的用法。
【讨论】:
_url。
_path 输出同样适用于重定向中的Location 标头。浏览器会将其解释为相对于根的重定向。
_path 在控制器中工作。
path 是相对的,url 是绝对的。
【讨论】:
一个名为“用户”的资源的差异示例:
users_url # => http://localhost:3000/users
users_path # => /users
【讨论】:
答案与 Petros 相同,但 modern browsers handle relative redirects just fine 除外。 (我会评论他的回答,但我还不能。)
【讨论】:
如果您的意思是不公开所有传递的数据,那么 _path 会更好,因为它会生成一个相对 url,类似于 '/login' 但 _path 会给出 'http://localhost:3000/login'。请参阅我发现的这篇博客文章。 When _url is better than _path
【讨论】:
_url 将给出整个路径。由于它包含域名和协议,因此您可以将其用于例如。发送电子邮件或重定向到另一个域等。
_path 将返回 '/' 之后的路径,没有域,协议等。所以你可以不时使用它(我猜),你不需要域的详细信息。
【讨论】:
_url 帮助器生成一个包含整个 URL 的字符串,而 _path 帮助器生成一个包含应用程序根目录的相对路径的字符串,例如:
photos_url # => "http://www.example.com/photos"
photos_path # => "/photos"
【讨论】: