ニートのMEMO

ニート生活をしたかった社会人がネットワークやサーバ、プログラミングなどについて勉強したことをメモとして残しているブログです。

rails tutorial memo (MVCについて)

前回までの記事

  1. rails tutorial memo (rails 開発環境構築) - ニートのMEMO
  2. rails tutorial memo (Gemfile書き方) - ニートのMEMO
  3. rails tutorial memo (rails server) - ニートのMEMO

MVC とは

  • Model-View-Controller のこと
  • Rails application 内の app ディレクトリにある 「models」「views」「controllers」で管理
  • Model は Controller が要求した情報を元に必要なデータを DB から取得する
  • View は Controller が要求した情報を元に View を構築する
  • Controller は ブラウザから来た要求に対して、Model や View に処理を振り分け中継する
  • MVC では画面表示と内部のアプリケーションを別のコードで処理している

f:id:katoko-o:20200505184844p:plain
MVCの簡略図

  • ① ブラウザから Webサーバに Request が来ると Controller が中継してすぐに View を構築して html をブラウザに返す場合
  • ② ブラウザから動的サイトに Request が来ると View を構築する前に Model がユーザ情報などを DB から取得してから Controller が View の構築を行い html をブラウザに返す場合

Controller

  • 新規で Controller を作成していない場合は、app/controllers/application_controller.rb (application コントローラ)のみが存在する
  • 上記のファイルに処理を記載することで画面の表示などの処理を変更できる
# Hello World! を画面に表示するだけの Controller
class ApplicationController < ActionController::Base
  def hello
    render html: "Hello World!"
  end 
end
  • Hello Wold 用のアクションを定義したが、デフォルトだと上記の Controller が参照されないため、ルーティングをする必要がある

Router

  • Router はブラウザと Controller の間に配置し、ブラウザからの Request を Controller に振り分ける役割
  • ルーティングを変更する場合は、config/routes.rb に記載する
    • apachehttpd.conf にある DocumentRoot を変えるようなイメージ
Rails.application.routes.draw do 
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
  root 'application#hello'
end
  • 上記の root 'application#hello' では application コントローラ の hello アクションを呼び出すというルーティングをしている

f:id:katoko-o:20200505192634p:plain
Rails app デフォルト画面

f:id:katoko-o:20200505192446p:plain
Hello World!