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?

Ruby on RailsのMVCの流れを暗記を極力せずに理解する

Posted at

背景 前提知識

MVCの流れを何回も忘れなるので忘れないようにしたい。
ファイルはある程度記載済みとする。

1. MVCをCMVと覚え直す 

C コントローラー そのままの意味 普通はとりあえずコントローラーからスタートだよねのイメージ
M モデル 英単語だと雛形、原型の意味、そこからデータベースの雛形とイメージする
V ビュー 英単語だと景色の意味、そこから、ユーザーが見ている画面とイメージ

2.自分がWebサイトを見ていることを想像する

まずとあるURL(localhost:3000/tasks)にアクセスするとする。
ちなみにブラウザでURLを直接入力したり、リンクをクリックした場合は、仕様により必ずHTTPリクエストGETメソッドが発動する。

3. HTTPサーバがリクエストを受け取る

Railsアプリは通常、PumaなどのHTTPサーバ上で動いている。
このサーバが最初にリクエストを受け取り、Railsアプリケーションに処理を渡す。

4. ルーティング(地図のようなもの)ファイルに移動

ルーティングファイルに到着し中身を確認してみる。

get "tasks", to: "tasks#index"

これによるとlocalhost:3000/tasksにアクセスしてそれがgetメソッドなら
tasks コントローラーにある

index アクション

発動せよと書いてある。

5.コントローラー(C)に移動

class TasksController 以降省略
 def index
     @tasks = Task.all
 end

Tasksコントローラー行ってみると、確かにindexアクションがある。
それによると
.allはモデルが持つ「全データ取得」メソッド
よってTasksはRailsの「モデル」クラス

6.モデルに移動(M)に移動

class Task < ActiveRecord::Base
end

ここには何も書かれていないが、親クラスはActiveRecordモジュールの中のBaseクラス。このBaseクラスがallメソッドを持っているため、Taskクラスもallメソッドを使える。

7.データベースに移動

ActiveRecordが Task.allを翻訳してくれ、「tasksテーブルの全データを取得するSQL文

SELECT * FROM tasks

を唱えて、データが取得できる。
このためSQLを意識せずにデータベース操作ができる。

8.コントローラー(C)に戻る

class TasksController 以降省略
 def index
     @tasks = Task.all
 end

とってきたデータを@tasksに代入。
Rubyでは、変数名の先頭に@を付けると、それは「インスタンス変数」になる。
インスタンス変数を定義すると、その値はコントローラーのアクション内だけでなく、対応するビューでも使えるようになる。

3行目はTaskのモデルからallメソッド使ってデータを取得して、左辺は@か、じゃあビューに渡したいのねというイメージ 

renderやredirect_to などの明示的な描画指示がなけばアクション名と同じ名前のviewテンプレートを自動的に探して描画する。例えば、PostsControllerのindexアクションならlocalhost:3000/views/posts/index.html.erbが自動的に呼び出される。

9. ビュー(V)に移動

とってきた@tasksは配列に似たオブジェクトなのでそれを分解して、htmlで表示する。

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?