Rails MVCについて復習
MVCフレームワーク
MVCは機能のことではなく、アプリケーションを作成する時にコードを綺麗に保って管理するための考え方のこと!
- Model
Modelの主な役割は、データベースを管理する事 - View
Viewの役割は、最終的な出力の描画を担当すること - Controller
Controllerの役割は、ViewとModelを繋ぐこと
リクエストからコントローラーまでの流れ
1〜3までがリクエストからコントローラーの流れ
クライアントからのリクエスト(1)はURLとしてアプリケーションのルーティング(2)に届く。
ルーティングは、送信されたリクエストに対し、どのコントローラーのアクションを動かすのかを設定する場所
config/routes.rb
get "tasks" => "tasks#index"
この内容は、
get "tasks"の「get」は、HTTPリクエストのGETメソッドを表す。
「get "tasks"」は、HTTPメソッドのGETで送信されるのURLの事。
「"tasks#index"」は、tasksコントローラーのindexアクションを使うことを設定している。
ルーティング(2)の次は、コントローラー(3)が動く。
routes.rbの「コントローラー名#アクション名」が、tasks_controller.rbの「ファイル名、クラス名、indexアクション」に紐づいている。
コントローラーからデータベースまでの流れ
3〜5がコントローラーからデータベースの流れ
コントローラー(3)のアクション内では、モデル(4)とのやりとりを行ってデータベース(5)からデータを取得することが出来る!
タスク一覧ページのリクエストが送信されているので、データベースに保存されているタスクのデータが必要!!
indexアクション内の「Task.all」は、Taskモデル(model/task.rb)のallメソッドを呼び出している。
Taskモデルが定義されているtask.rbファイルを確認すると、メソッドは一切定義されていないのはなぜか??
model/task.rb
class Task < ActiveRecord::Base
end
これは、TaskクラスがActiveRecord::Baseクラスを継承しているから!!
🐥補足🐥
テーブル名は、モデルクラス名の複数形の名前になります。 モデルクラス名がTaskの場合は、関連するテーブル名は、複数形のtasksになります。テーブルには1つのデータではなく、多くのデータが入るので複数形になります。
コントローラーからビューまでの流れ
6,7がコントローラーとビューの流れ
コントローラー(7)は、モデル(4)を通してテーブル(5)から取得したデータを持っている。
これをビュー(7)に渡すことによって、リクエストされたデータを表示する事が出来る。
indexアクション内では、取得したデータを@tasksに代入している。
「@」がついた変数に値を代入すると、ビューファイルに渡す事が出来る!!(インスタンス変数)
アクションが動いた後、必ずアクション名と同じビューファイル(views/コントローラー名/アクション名.html.erb)が呼び出される。
例
views/tasks/index.html.erb
<h1>タスク一覧</h1>
<% @tasks.each do | task | %>
<%= task.name %>
<% end %>
@tasksには、tasksテーブルの全レコードが代入されている。
これをeachメソッドを使って1つ1つ取り出してタスクの名前だけを表示させている!!
応用課題をやっていて、この部分の流れがもっと頭に入っていたら
エラーを人に説明する時ももっとスムーズにできそうと感じたので、
今一度、基本的な部分を復習!
Discussion
今日の投稿のタイトル、一緒でびっくりした笑
ほんとだ笑あいりちゃんの記事分かりやすかった!!🥺