イベントや学習過程で学んだことをアウトプットしようチャレンジ
📝第一弾(すべてを一回では厳しかったので何段階かに分けてまとめていく)
これから説明力や読みやすさを探求して少しづつ改善していけたらと思ってますので、もし興味があればお読みいただけますと幸いです。
明示的でなくてもアクションが実行される理由
def index
@users = User.all
/# renderが明示的に書かれていない?
end
理解できてきたポイントや新たに発生した疑問を自分なりにまとめてみた。(間違いやアドバイスあればご指摘いただけますと幸いです)
🤔復讐してみて
・設定より規約の意味がわかってきた
・Webページが表示されるまでの流れが具体的になってきた
・加えてドメインとパスの違いについてもおさらいした!
・HTTPリクエストとルーティングの関係性についても新たに学習
✅疑問
・HTTPリクエストとルーティングの関係性
↓
Railsが内部で行っている処理(イメージ)の前段階
ユーザーがブラウザで localhost:3000/users にアクセス
↓
ブラウザが HTTPリクエスト を生成してサーバーに送信
/# HTTPリクエストに含まれる情報:
GET /users HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0...
Cookie: session\_id=abc123
...
↓
Railsサーバは受け取ったHTTPリクエストから以下の情報を取り出す
HTTPメソッド: GET
パス: /users
↓
ルーティングでの振り分け(HTTPリクエストの情報を見て、どのコントローラーのどのアクションを実行するか決めること)
↓
ルーティングの処理(config/routes.rb):
/# config/routes.rb
get '/users', to: 'users#index'
or
resources :users ← 7つのルーティングが自動で定義される(rails routesコマンドで確認できる)
/# ↑ HTTPメソッドとパスが一致!
↓
UsersController の index アクションに振り分け
/# Railsが内部で行っている処理(イメージ)
def index
@users = User.all
/# renderが明示的に書かれていない?
/# → じゃあ規約に従って探そう!
/# → コントローラー名: users
/# → アクション名: index
/# → app/views/users/index.html.erb を探す
/# → 見つかった! ビューをレンダリングしてHTMLを生成しよう
end
↓
見つかったビューをレンダリングしてHTMLを生成
<!-- app/views/users/index.html.erb -->
<h1>ユーザー一覧</h1>
<ul>
<% @users.each do |user| %>
<li><%= user.name %></li>
<% end %>
</ul>
↓
このタイミングで:
一回のレンダリング処理 でHTMLを生成
ERBのコードが評価されて、最終的なHTMLに変換される(深くなってきたので一旦ここはスキップ)
/#生成されるHTML:
<h1>ユーザー一覧</h1>
<ul>
<li>田中太郎</li>
<li>佐藤花子</li>
<li>鈴木一郎</li>
</ul>
↓
ブラウザにレスポンスとして返す
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
<html>
<head>...</head>
<body>
<h1>ユーザー一覧</h1>
<ul>
<li>田中太郎</li>
<li>佐藤花子</li>
<li>鈴木一郎</li>
</ul>
</body>
</html>
↓
このタイミングで:
生成されたHTMLをブラウザに送信
↓
ブラウザがHTMLを受け取って表示