命名路线_path与_url


109

Rails提供了命名路线

可以使用路径或网址调用路由助手

例如从文档:

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

坦白讲,我从未使用过*_url助手,我能够使用它进行工作*_path

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

它们彼此之间有什么不同?

一些真实的例子,并附有解释什么时候该使用的很棒。

Answers:


156

_path帮助者提供了站点根相对路径。您可能大部分时间都应该使用此功能。

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


这两个答案几乎相似,但我给您一个正确的答案,例如“在YouTube视频的“共享”部分下复制并粘贴URL字段”,并且已经为@mori +1 :)
Pritesh Jain

谢谢。我正在构建一个DAM解决方案,其中有一个复制/粘贴的“共享URL”字段,类似于YouTube。这是我想到的第一件事。
克里斯·彼得斯

13

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


我最近在链接和域方面遇到了问题,并且_url帮助程序是我使用正确的域而不是“与主机相关”的链接来获取链接的唯一方法。
Pierre-Adrien Buisson,2012年

1
当应用中有某些子域时,我也会使用_url帮助器。例如,当im在abc.example.com上时,_path将重定向到abc.example.com/somesection时,_url将正确地重定向到example.com/somesection
Wordica 2013年

10

正如其他答案所解释的那样,您应该_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


1
引用第一个链接(以防万一它消失了):“但是,在控制器中,* _ url对于redirect_to是必需的,因为HTTP规范要求3xx重定向中的Location:标头是一个完整的URL。”
Terrabits's

2

_path提供相对路径。

_url提供绝对路径。

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


不赞成投票,因为这正是克里斯·彼得斯在此答案之前两年已经回答的内容。多余的答案没有帮助。
jeffdill2's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.