Rotas nomeadas _path vs _url

109

O Rails fornece rotas nomeadas .

O auxiliar de rotas pode ser chamado usando o caminho ou url

por exemplo, de documentos:

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

falando francamente, eu nunca usei o *_urlhelper ainda, consegui fazer as coisas funcionarem usando *_path.

Fiquei um pouco confuso qual é o propósito desses dois ajudantes diferentes?

como eles são diferentes um do outro?

alguns exemplos reais com explicações de quando usar o que seria ótimo.

Pritesh Jain
fonte

Respostas:

156

_pathauxiliares fornecem um caminho relativo à raiz do site. Você provavelmente deve usar isso na maioria das vezes.

_urlajudantes fornecem um caminho absoluto, incluindo protocolo e nome do servidor. Descobri que uso essas mensagens principalmente em e-mails ao criar links para o aplicativo no servidor. Eles devem ser usados ​​principalmente ao fornecer links para uso externo. (Pense em links de e-mail, RSS e coisas como o campo copiar e colar URL na seção "Compartilhar" de um vídeo do YouTube.)

Chris Peters
fonte
ambas as respostas são quase semelhantes, mas dou a resposta correta para este exemplo "copiar e colar o campo URL na seção" Compartilhar "de um vídeo do YouTube e já +1 para @mori :)
Pritesh Jain
Obrigado. Estou construindo uma solução DAM em que há um campo "Compartilhar URL" para copiar / colar semelhante ao que o YouTube faz. Foi uma das primeiras coisas que veio à mente.
Chris Peters
13

Quando você coloca um link em seu próprio site, a parte do domínio da rota é redundante e aumenta o tamanho da página, portanto, você pode usar apenas a parte do caminho da URL com o *_pathauxiliar. Por outro lado, se a URL for consumida fora do seu site, por exemplo, um e-mail ou feed RSS, a URL inteira será necessária, portanto, use o *_urlauxiliar.

Mori
fonte
Recentemente, tive um problema com links e domínio, e o auxiliar _url era meu único meio de obter links usando o domínio adequado e não links "relacionados à hospedagem".
Pierre-Adrien Buisson
1
Eu também uso o helper _url quando tenho alguns subdomínios no aplicativo. Por exemplo, quando estou em abc.example.com _path irá redirecionar para abc.example.com/somesection quando _url irá redirecionar corretamente para example.com/somesection
Wordica
10

Como explicam as outras respostas, você deve usar _urlem links de e-mail, etc. Mas gostaria de acrescentar que você também deve usar _urlem redirecionamentos, conforme explicado aqui:

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

e aqui:

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

Você também pode dar uma olhada na seção relevante da especificação HTTP aqui:

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

Daniel Romero
fonte
1
Citando o primeiro link (caso desapareça): "No controlador, porém, * _url é necessário para redirect_to porque a especificação HTTP exige que o cabeçalho Location: em redirecionamentos 3xx seja um URL completo."
Terrabits
2

_path fornece um caminho relativo.

_url fornece um caminho absoluto.

Sempre que você envia uma URL por email, etc., é uma prática recomendada usar _url em vez de _path.

SD
fonte
Downvoting porque isso é exatamente o que Chris Peters já havia respondido dois anos antes desta resposta. Respostas redundantes não ajudam.
jeffdill2