名前付きルート_pathと_url


109

Railsは名前付きルートを提供します。

ルートヘルパーは、パスまたはURLを使用して呼び出すことができます

例:ドキュメントから:

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

率直に言っ*_urlて、私はヘルパーをまだ使用したことがありません*_path。使用して物事を動作させることができました。

これら2つの異なるヘルパーの目的は何ですか?

それらは互いにどのように違うのですか?

素晴らしいものをいつ使用するかを説明する実際の例。

回答:


156

_pathヘルパーはサイトルート相対パスを提供します。ほとんどの場合、これを使用する必要があります。

_urlヘルパーは、プロトコルとサーバー名を含む絶対パスを提供します。サーバーでアプリへのリンクを作成するときに、主にメールでこれらを使用していることがわかりました。それらは主に外部使用のためのリンクを提供するときに使用されるべきです。(メールのリンク、RSS、およびYouTubeビデオの[共有]セクションの下にあるURLのコピーアンドペーストフィールドなどを検討してください。)


どちらの回答もほぼ同じですが、この例の「YouTube動画の[共有]セクションの下にあるURLフィールドをコピーして貼り付ける」という正しい答えをお伝えします。@ moriの+1は既に行われています:)
Pritesh Jain

ありがとう。YouTubeと同じように「URLを共有」フィールドをコピーして貼り付けるDAMソリューションを構築しています。それは最初に頭に浮かんだことの1つでした。
Chris Peters、

13

自分のサイトにリンクを配置すると、ルートのドメイン部分が冗長になり、ページサイズが増えるため、*_pathヘルパーでURLのパス部分を使用できます。一方、メールやRSSフィードなど、サイトの外部でURLを使用する場合は、URL全体が必要なので、*_urlヘルパーを使用します。


最近、リンクとドメインに問題がありました。_urlヘルパーは、「ホスティング関連」リンクではなく、適切なドメインを使用してリンクを取得する唯一の手段でした。
Pierre-Adrien Buisson 2012

1
アプリにサブドメインがある場合は、_urlヘルパーも使用します。たとえば、abc.example.comのimの場合、_pathはabc.example.com/somesectionにリダイレクトされます
。_url

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
最初のリンクを引用します(表示されない場合):「HTTP仕様では3xxリダイレクトのLocation:ヘッダーが完全なURLであると規定されているため、redirect_toには* _urlが必要です。」
Terrabits

2

_pathは相対パスを提供します。

_urlは絶対パスを提供します。

メールなどでURLを送信する場合は常に、_pathではなく_urlを使用することをお勧めします。


これは、Chris Petersがこの回答の2年以上前にすでに回答していたものとまったく同じなので、反対票を投じます。冗長な回答は役に立ちません。
jeffdill2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.