見出し画像

MVCの動作について

コードを書いていく上で動きを理解しながら記載したいため、ここで改めて動作を確認していきたいと思う。
コントローラやViewの表示は記載していく上で必要な考え方である。

MVCの動作

動作について詳しくみていく動作について詳しくみていく
流れとしては再度記載しておく
1. ブラウザからのリクエストをRailsサーバーが受け取り、Routesに送る
2. RoutesがURLとHTTPメソッドにマッチするコントローラーに処理を振り分ける
3. コントローラのアクション(処理)の中にモデルに関係する記述があれば、モデルに命令を出す
4. モデルはデータベースにデータ操作の命令を出す
5. データベースは該当するデータをモデルに返す
6. モデルはデータベースから受け取ったデータをコントローラに返す
7. コントローラは得られた結果をViewに渡す
8. ViewはHTMLを生成し、ブラウザに表示する

1.ブラウザからのリクエストをRailsサーバーが受け取り、Routesに送る

app/views/pages/index.html.erb
<%= link_to 'Sign up', new_user_path, class: 'btn btn-block btn-white' %>
link_toメソッドでは何も指定しないデフォルトの状態だと、”GET”でリクエスト
「Sign up」ボタンを押すと、”GET”の「/users/new」というURLと一緒にRoutesにアクセスする

2.RoutesがURLとHTTPメソッドにマッチするコントローラーに処理を振り分ける

ルーティングを探しマッチするコントローラーに処理を振り分けるのは、config/routes.rbが処理する
config/routes.rb
Rails.application.routes.draw do
root 'pages#index'
get 'pages/help'
resources :users
end
ファイルの中で、”GET”リクエストで「/users/new」というURLの組み合わせに該当するコードを探す
”GET”「/users/new」は、resources :usersの ”usersコントローラーのnewアクション”にアクセスするように定義されている

3.コントローラのアクション(処理)の中にモデルに関係する記述があれば、モデルに命令を出す

usersコントローラーのnewアクションを参照
users_controller.rbのnewアクションでは、「@user = User.new」が記述される

4.モデルはデータベースにデータ操作の命令を出す

newメソッドは、クラスからインスタンスを生成するメソッド
Userモデルは、データベースからレコード(ユーザーテーブル)を作成する命令

5.データベースは該当するデータをモデルに返す

Userモデルから作られるインスタンスは、ユーザーレコード(ユーザーテーブル)
「User.new」で生成されたレコード(ユーザーテーブル)をコントローラーに返す
「@user = User.new」となっているので、返されたレコードをインスタンス変数@userに代入

6.モデルはデータベースから受け取ったデータをコントローラに返す

「User.new」で生成されたレコード(ユーザーテーブル)をコントローラーに返す
「@user = User.new」となっているので、返されたレコードをインスタンス変数@userに代入

7.コントローラは得られた結果をViewに渡す

UsersControllerのnewアクションが実行されているので、viewsフォルダの中のusersフォルダのnew.html.erbが開く
Railsでは、アクション名と同じviewファイルが開く仕様になっている

8.ViewはHTMLを生成し、ブラウザに表示する

app/views/users/new.html.erbが実行される
formタグには入力しなければいけない項目として「action」(アクセス先)がある
form_for構文では、引数にレコードを指定すると、自動的にこの「action」を作成する

Rubyで書かれた内容をコントーラやviewを通してブラウザに閲覧させる動作について学んだ。この動作を把握していかないとエラーが発生した時に、どこで発生したかがわからなくなることが多いと思うので、しっかりと頭に入れていきたいと思う。
動作をコードとして認識して受け渡す動作はややこしいなと思ったこの頃です。


この記事が気に入ったらサポートをしてみませんか?