はじめに
あるボタンやロゴを押すとトップページに移動したり、新規登録画面に移動したり。そんな設定がされている事よくありますよね。中の構造はどうなっているのか、絶対課題の中で学習しているはずですが、当時ははっきり理解していなく、つい最近になりやっと(半分)理解。忘れないようにアウトプットしたいと思います。
例を挙げてみる
app/views/shared/_header.html.erb
<%= link_to "サイト名", '#', class: "text-xl md:text-3xl text-white" %>
ヘッダーで入力したコードになります。ヘッダーの左側に白い文字で「サイト名」と表示されていると想像してください。
現在リンク先は#
となっていて「サイト名」という文字を押しても画面遷移はされないようになっています
遷移先をトップページにする
トップページが StaticPagesController の top アクションに関連付けられています
app/controllers/static_pages_controller.rb
class StaticPagesController < ApplicationController
def top; end
end
config/routes.rbに次のような設定をします
Rails.application.routes.draw do
root 'static_pages#top'
end
この設定により、root_path は StaticPagesController の top アクションへのパスを指し示すようになります。
さいごにapp/views/shared/_header.html.erbに最終的なリンク先を設定します
<%= link_to "サイト名", root_path, class: "text-xl md:text-3xl text-white" %>
rootとget
1. root_path
の特別な役割
root_path
は、Rails アプリケーションのルート URL を指すヘルパーメソッドです。config/routes.rb
で以下のように設定された場合:
root 'static_pages#top'
この設定により、root_path
は StaticPagesController
の top
アクションへのパスを指し示すようになります。これはアプリケーションの「ホームページ」を表すため、通常は 1 つしか設定できません。
2. root_path
の設定と他のルートパスとの違い
-
root
ルート:-
root
はアプリケーション全体の「ホームページ」を指定するもので、1 つのルートだけが存在します。 - これは
root 'controller#action'
という形式で指定します。 - 他のルートとは異なり、
root
で指定された URL はアプリケーション全体で一意です。
例えば、root 'static_pages#top'
と設定した場合、アプリケーションのルートパス (/
) にアクセスするとStaticPagesController
のtop
アクションが呼ばれます。
-
-
通常の
get
ルート:-
get
メソッドで指定されるルートは、リソースやアクションに基づいて複数設定できます。
例えば、get 'terms_of_service', to: 'static_pages#terms_of_service'
と設定すれば、terms_of_service_path
でそのページにアクセスできます。 - これにより、複数の異なる URL パスが異なるコントローラーアクションに対応します。
-
3. なぜ root_path
のような特別なパスヘルパーが存在するのか
root_path
はアプリケーションの「ホームページ」を示すための特別なメソッドであり、get
メソッドで指定する通常のルートとは異なります。root
ルートは一意であり、アプリケーション全体のトップページに対応します。そのため、以下のように root_path
という名前でアクセスできるのです。
4. get
との違い
-
get
:- URL パターンとコントローラーアクションをマッピングします。これにより、複数のルートを設定できます。
- 例:
get 'terms_of_service', to: 'static_pages#terms_of_service'
では、terms_of_service_path
がそのルートに対応します。
-
root
:- アプリケーションのホームページを指定するための特別なルートです。1 つしか設定できません。
- 例:
root 'static_pages#top'
はroot_path
でアクセスできます。
要約すると、root_path
はアプリケーションの「ルート」URL を指し示す特別なメソッドであり、他の get
ルートと異なり、一つだけ設定できるという特徴があります。
ページ遷移に関するコードの構成をもっと深ぼる
ページ遷移に関するコードは、一般的には以下の 3 つのファイルやディレクトリで構成されています
-
config/routes.rb
:- アプリケーションの URL ルーティングを定義するファイルです。どの URL がどのコントローラーのどのアクションにマッピングされるかを指定します。
- 例:
root 'static_pages#top'
やget 'about', to: 'static_pages#about'
など。
-
コントローラー (
app/controllers/
):- ビジネスロジックを担当するクラスです。リクエストを受け取り、ビューをレンダリングするためのデータを用意します。
- 例:
StaticPagesController
というクラスがtop
やabout
アクションを持つ場合、そのアクションに関連するビジネスロジックが記述されます。
-
ビュー (
app/views/
):- ユーザーに表示される HTML を生成するファイルです。コントローラーが渡したデータを使って、最終的な表示内容を決定します。
- 例:
app/views/static_pages/top.html.erb
やapp/views/static_pages/about.html.erb
などが、各アクションに対応するビューです。
この 3 つの部分が連携して、ユーザーがリクエストしたページが表示されます。
さいごに
ルート設定に調べるほど、奥が深く難しい。「あれ、そういえばこのコードってどういう仕組みなんだっけ?」この流れから復習or新たな気づきにつながるので「なぜ」は大切。