🥨

Rails MVCについて復習

2023/04/26に公開2

MVCフレームワーク

MVCは機能のことではなく、アプリケーションを作成する時にコードを綺麗に保って管理するための考え方のこと!

引用 https://pikawaka.com/rails/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

AirichanAirichan

今日の投稿のタイトル、一緒でびっくりした笑

sayasaya

ほんとだ笑あいりちゃんの記事分かりやすかった!!🥺