在rails中使用path时,_url和_path有什么区别?

当我们使用像map.some_link这样的名字在routes.rb定义路由时,我们可以通过两种方式使用链接: some_link_urlsome_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指南 – 路由 。