はじめに
- プログラミング学習を開始して3ヶ月の初学者が、Ruby on Railsチュートリアルに取り組んでいる中で疑問に思った点を言語化し、疑問点を解消、および知識を定着させることを目的とした記事です。
- 今回は
link_to
ヘルパー、url_for
ヘルパー、redirect_to
メソッドなどで指定するパス(URL)では様々な記述方法があるものの、それらの使い分け方などについてあまり理解できていないと感じていたため、調査・まとめをすることとしました。
前提条件
- 今回は例として
$ rails g scaffold Entry title:string body:text
とした場合を想定しています。 - ルーティングには
resources :entries
を設定し、$ rails routes
では以下のように示されているとします。
Prefix Verb URI Pattern Controller#Action
entries GET /entries(.:format) entries#index
POST /entries(.:format) entries#create
new_entry GET /entries/new(.:format) entries#new
edit_entry GET /entries/:id/edit(.:format) entries#edit
entry GET /entries/:id(.:format) entries#show
PATCH /entries/:id(.:format) entries#update
PUT /entries/:id(.:format) entries#update
DELETE /entries/:id(.:format) entries#destroy
Railsにおけるリンクパスの指定方法
- この3ヶ月のRails学習(Progate, ドットインストール, Railsチュートリアル)の過程で出会ったリンクパスの種類は以下3パターンです。
1. URI Pattern
2. Prefix_path
3. Prefix_url
- これらの違いについて調べた内容を下記します。
1. URI Patternによるパス指定
-
<%= link_to @entries.title, '/entries' %>
のような形となります。 - テスト用の、
test ~ do ... end
の中ではこの記述方法での指定が必要とのことです。 - Progateではこの記述法のみ取り扱っていました。
- Progateから入った私としては、これが最も読みやすく馴染みやすいと感じているのですが、ドットインストールやRailsチュートリアルでは基本的にこの形での記述はしていませんでした。
- 簡単なヒアリングをした結果、この記述方法は実務ではあまり使われていないようです(違っていたらすみません。)
- なぜあまり使われていないのかについて理由が分かる方がいらっしゃいましたらご教示いただければ幸いです。
- 理由についてコメントをいただきました。詳しくは下記コメントをご参照ください。(@scivolaさん、ありがとうございました。)
2. Prefix_pathによるパス指定
-
<%= link_to @entries.title, entries_path %>
のような形となります。 - リソースフルなルーティングを作成すると、利用できるようになるヘルパーです。
- 例えば、
entries_path
は/entries
を返し、new_entries_path
は/entries/new
を返します。 -
test ~ do ... end
の中ではこの記述方法での指定はNGとのことです。 - 体感ですが、ドットインストールやRailsチュートリアルではこの形が最も使用されていた気がします。
3. Prefix_urlによるパス指定
-
<%= link_to @entries.title, entries_url %>
のような形となります。 -
_url
は、_path
の前に現在のホスト名、ポート番号、パスのプレフィックスが追加されている点が異なります。- つまり、
http://www.example.com/entries
と完全なURLの文字列を返すという意味です。
- つまり、
-
redirect_to
では_url
を使用し、それ以外は_path
を使うとのこと。- コメントをいただき、
_url
はredirect_to
のとき限定ではなく、使用する際の本質的な考え方として「https://
で始まるフルのURLが必要かどうか」という点が重要となってくるようです。(@scivolaさん、ありがとうございました。)
- コメントをいただき、
-
test ~ do ... end
の中ではこの記述方法での指定はNGとのことです。
まとめ
- Railsにおける下記のリンクパスの指定法についてまとめた。
-
URI Pattern
-
Prefix_path
-
Prefix_url
-
- それぞれの使い分けは以下の通りであった。
-
test ~ do...end
中では1.を使用 -
https://
で始まるフルのURLが必要な場面では3.を使用 - その他の場合は2.を使用
-