使用rails中的路由时,_url和_path之间有什么区别

Moh*_*lla 68 routes ruby-on-rails

当我们routes.rb使用名称来定义路线时,map.some_link我们可以用两种方式使用链接 - some_link_url, some_link_path.

  • 两者有什么不同?
  • 哪个更安全?

Pet*_*ros 82

我有同样的问题,我在博客上了一篇关于此的小帖子

原因总结在这里(我在论坛上发现了这个):

*_path用于视图,因为ahrefs隐式链接到当前URL.所以一遍又一遍地重复它是浪费字节.但是,在控制器中,redirect_to需要*_url,因为HTTP规范要求3xx重定向中的Location:头是完整的URL.

这是另一种解释,它说明它取决于我们是否需要在从非SSL站点链接到SSL站点时使用绝对URI,反之亦然.

到目前为止我所读到的并不是说它们中的任何一个比另一个更安全.这真的归结为什么是"正确"的用法.

  • 您不需要使用*_url作为控制器,路径也可以正常工作.在显示到外部源的路径时,您应该只使用`_url`. (14认同)
  • 非常感谢.发现它很有用.所以在控制器中我们使用"_url",而在视图中我们可以使用"_path",尽管"_url"仍然可以在那里使用. (3认同)
  • 为了澄清一些问题:`_path`输出对于重定向中的`Location`标题也同样有用.浏览器会将其解释为相对于根目录的重定向. (3认同)
  • 答案中的引用不正确.`_path`适用于控制器. (2认同)
  • 您博客文章的 URL 是 404'ing。你能更新链接吗? (2认同)

pon*_*zao 77

pathurl绝对是相对的.

  • 相当简洁.我喜欢简洁.;)+1 (2认同)
  • 完善.在控制器(服务器端)中需要使用_url,在视图中使用_path(浏览器端). (2认同)

Jas*_*son 37

一个名为"user"的资源的区别示例:

users_url # => http://localhost:3000/users
users_path  # => /users
Run Code Online (Sandbox Code Playgroud)