命名路由 _path 与 _url
Posted
技术标签:
【中文标题】命名路由 _path 与 _url【英文标题】:Named routes _path vs _url 【发布时间】:2012-08-10 00:15:19 【问题描述】:Rails 提供named routes。
可以使用路径或 url 调用路由助手
例如来自文档:
# and provide these named routes
root_url # => 'http://www.example.com/'
root_path # => '/'
坦率地说,我还没有使用过 *_url
助手,我可以使用 *_path
来完成工作。
我有点困惑这两个不同的助手的目的是什么?
它们有什么不同?
一些真实的例子,说明何时使用什么会很棒。
【问题讨论】:
【参考方案1】:_path
助手提供了一个站点根相对路径。您应该大部分时间都应该使用它。
_url
助手提供一个绝对路径,包括协议和服务器名称。我发现在服务器上创建指向应用程序的链接时,我主要在电子邮件中使用这些。它们应该主要在提供外部使用的链接时使用。 (想想电子邮件链接、RSS 以及 YouTube 视频的“分享”部分下的复制和粘贴 URL 字段等内容。)
【讨论】:
两个答案几乎相似,但我在此示例“在 YouTube 视频的“分享”部分下复制并粘贴 URL 字段”并且已经为@mori +1 提供了正确答案:) 谢谢。我正在构建一个 DAM 解决方案,其中有一个类似于 YouTube 所做的复制/粘贴“共享 URL”字段。这是我首先想到的事情之一。【参考方案2】:当您在自己的站点中放置链接时,路由的域部分是多余的,并且会增加页面大小,因此您可以将 URL 的路径部分与 *_path
帮助器一起使用。另一方面,如果要在您的站点之外使用 URL,例如电子邮件或 RSS 提要,需要完整的 URL,因此请使用 *_url
助手。
【讨论】:
我最近遇到了链接和域的问题,而 _url 帮助器是我使用正确域而不是“托管相关”链接获取链接的唯一方法。 当应用中有一些子域时,我也会使用 _url 助手。例如,当 im 在 abc.example.com 上时,_path 将重定向到 abc.example.com/somesection,而 _url 将正确重定向到 example.com/somesection【参考方案3】:正如其他答案所解释的,您应该在电子邮件链接等中使用_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。 "【参考方案4】:_path 提供相对路径。
_url 提供绝对路径。
每当您通过电子邮件等方式发送 URL 时,最好使用 _url 而不是 _path。
【讨论】:
投反对票,因为这正是克里斯彼得斯在此答案之前两年多已经回答的问题。多余的答案没有帮助。 赞成,因为它在视觉上不那么嘈杂,您无需解析诸如“您应该”或“我发现”或“它们主要应该被使用”之类的意见短语即可获得答案以上是关于命名路由 _path 与 _url的主要内容,如果未能解决你的问题,请参考以下文章