0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ページ遷移について、いまさら知った。getとroot

Posted at

はじめに

あるボタンやロゴを押すとトップページに移動したり、新規登録画面に移動したり。そんな設定がされている事よくありますよね。中の構造はどうなっているのか、絶対課題の中で学習しているはずですが、当時ははっきり理解していなく、つい最近になりやっと(半分)理解。忘れないようにアウトプットしたいと思います。

例を挙げてみる

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_pathStaticPagesControllertop アクションへのパスを指し示すようになります。これはアプリケーションの「ホームページ」を表すため、通常は 1 つしか設定できません。

2. root_path の設定と他のルートパスとの違い

  • root ルート:
    • root はアプリケーション全体の「ホームページ」を指定するもので、1 つのルートだけが存在します。
    • これは root 'controller#action' という形式で指定します。
    • 他のルートとは異なり、root で指定された URL はアプリケーション全体で一意です。
      例えば、root 'static_pages#top' と設定した場合、アプリケーションのルートパス (/) にアクセスすると StaticPagesControllertop アクションが呼ばれます。
  • 通常の 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 つのファイルやディレクトリで構成されています

  1. config/routes.rb:
    • アプリケーションの URL ルーティングを定義するファイルです。どの URL がどのコントローラーのどのアクションにマッピングされるかを指定します。
    • 例: root 'static_pages#top'get 'about', to: 'static_pages#about' など。
  2. コントローラー (app/controllers/):
    • ビジネスロジックを担当するクラスです。リクエストを受け取り、ビューをレンダリングするためのデータを用意します。
    • 例: StaticPagesController というクラスが topabout アクションを持つ場合、そのアクションに関連するビジネスロジックが記述されます。
  3. ビュー (app/views/):
    • ユーザーに表示される HTML を生成するファイルです。コントローラーが渡したデータを使って、最終的な表示内容を決定します。
    • 例: app/views/static_pages/top.html.erbapp/views/static_pages/about.html.erb などが、各アクションに対応するビューです。

この 3 つの部分が連携して、ユーザーがリクエストしたページが表示されます。

さいごに

ルート設定に調べるほど、奥が深く難しい。「あれ、そういえばこのコードってどういう仕組みなんだっけ?」この流れから復習or新たな気づきにつながるので「なぜ」は大切。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?