在rails中使用path时,_url和_path有什么区别?
当我们使用像map.some_link
这样的名字在routes.rb
定义路由时,我们可以通过两种方式使用链接: some_link_url
, some_link_path
。
- 两者有什么区别?
- 哪个更安全可以使用?
我有同样的问题,我在我的博客写了一个关于这个小的post
原因总结在这里(我发现这个在论坛上):
* _path是视图,因为ahrefs隐式链接到当前的URL。 所以,一遍又一遍地重复它会浪费字节。 在控制器中,redirect_to需要* _url,因为HTTP规范要求3xxredirect中的Location:头是一个完整的URL。
这是另外一种解释 ,它说取决于从非SSL站点链接到SSL站点时是否需要使用绝对URI,反之亦然。
到目前为止,我所读到的并不是说它们中的任何一个都比另一个更安全。 这真的归结为什么是“适当”的用法。
path
是相对的,而url
是绝对的。
资源名为“user”的差异示例:
users_url # => http://localhost:3000/users users_path # => /users
除了现代浏览器处理相对redirect就好了 ,和Petros一样的答案。 (我会评论他的答案,但我还不能。)
通过安全,如果你的意思是不暴露所有的数据传递,那么_path是更好的,因为它产生一个相对的url,像'/login',但_path会给' http:// localhost:3000 /login '。 请参考这篇博客文章,我发现有时候也是这样。 当_url比_path更好时
_url会给出整个path。 由于它包含域名和协议,所以可以用于例如。 发送电子邮件或redirect到另一个域名等。
_path将返回“/”之后的path,没有域名,协议等。所以你可以使用它(我猜),你不需要域的细节。
_url
助手会生成一个包含整个URL的string,而_path
帮助程序会生成一个包含应用程序根目录的相对path的string,例如:
photos_url # => "http://www.example.com/photos" photos_path # => "/photos"
按照Rails指南 – 路由 。