ChatGPT解决这个技术问题 Extra ChatGPT

命名路由 _path 与 _url

Rails 提供 named routes

可以使用路径或 url 调用路由助手

例如来自文档:

# and provide these named routes
root_url   # => 'http://www.example.com/'
root_path  # => '/'

坦率地说,我还没有使用过 *_url 助手,我能够使用 *_path 让事情正常进行。

我有点困惑这两个不同的助手的目的是什么?

它们彼此有何不同?

一些真实的例子,解释何时使用什么会很棒。


C
Chris Peters

_path 帮助程序提供站点根相对路径。您可能应该在大多数情况下使用它。

_url 帮助程序提供绝对路径,包括协议和服务器名称。我发现在服务器上创建指向应用程序的链接时,我主要在电子邮件中使用这些。它们应该主要在提供外部使用的链接时使用。 (想想电子邮件链接、RSS 以及 YouTube 视频“分享”部分下的复制和粘贴 URL 字段等内容。)


M
Mori

当您在自己的站点中放置链接时,路由的域部分是多余的,并且会增加页面大小,因此您可以将 URL 的路径部分与 *_path 帮助器一起使用。另一方面,如果要在您的站点之外使用 URL,例如电子邮件或 RSS 提要,则需要整个 URL,因此请使用 *_url 帮助程序。


我最近遇到了链接和域的问题,而 _url 帮助器是我使用正确域而不是“托管相关”链接获取链接的唯一方法。
当应用程序中有一些子域时,我也会使用 _url 助手。例如,当 im 在 abc.example.com 上时,_path 将重定向到 abc.example.com/somesection,而 _url 将正确重定向到 example.com/somesection
D
Daniel Romero

正如其他答案所解释的,您应该在电子邮件链接等中使用 _url。但我想补充一点,您还应该在重定向中使用 _url,如下所述:

https://www.ruby-forum.com/topic/101346#221052

和这里:

http://viget.com/extend/rails-named-routes-path-vs-url

您还可以在此处查看 HTTP 规范的相关部分:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30


引用第一个链接(以防它消失):“但是,在控制器中,redirect_to 需要 *_url,因为 HTTP 规范要求 Location: 3xx 重定向中的标头是完整的 URL。”
S
S.D

_path 提供相对路径。

_url 提供绝对路径。

每当您通过电子邮件等发送 URL 时,最好使用 _url 而不是 _path。


投反对票,因为这正是克里斯彼得斯在此答案之前两年多已经回答的问题。多余的答案没有帮助。
赞成,因为它在视觉上不那么嘈杂,您无需解析诸如“您应该可能”或“我发现”或“它们应该主要被使用”之类的意见短语即可获得答案

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅