routes.rb
のような名前を使用してmap.some_link
でルートを定義する場合、リンクは2つの方法で使用できます-some_link_url
、some_link_path
。
私は同じ質問をして、 私のブログでこれについての小さな投稿 を書きました。
その理由をここに要約します(私はこれをフォーラムで見つけました):
* _pathは、ahrefが現在のURLに暗黙的にリンクされているため、ビュー用です。そのため、何度も繰り返すのはバイトの無駄です。ただし、コントローラーでは、HTTP仕様では3xxリダイレクトのLocation:ヘッダーが完全なURLであることが義務付けられているため、redirect_toには* _urlが必要です。
別の説明があります これは、非SSLサイトからSSLサイトにリンクするときに絶対URIを使用する必要があるかどうかに依存することを示しています。
私がこれまで読んだことは、それらのどれもが他のものより安全であることを示唆していません。本当に「適切な」使用法になります。
path
は相対的ですが、url
は絶対です。
「user」というリソースの違いの例:
users_url # => http://localhost:3000/users
users_path # => /users
現代のブラウザは相対リダイレクトをうまく処理する であることを除いて、Petrosと同じ答え。 (私は彼の答えにコメントしますが、まだできません。)
渡されたすべてのデータを公開しない場合は、「/ login」のような相対URLを生成しますが、_pathは「 http:// localhost:3000/login '。同じことについていつか見つけたこのブログ投稿を参照してください。 _ urlが_pathよりも優れている場合
_urlはパス全体を提供します。ドメイン名とプロトコルが含まれているため、たとえば、電子メールを送信したり、別のドメインにリダイレクトするなど。
_pathは、ドメイン、プロトコルなどなしで「/」の後にあるパスを返します。したがって、ドメインの詳細を必要としない場所で、時々使用することができます。