scaffoldでMVCを確認
MVCモデル
①リクエスト
クライアントからのリクエストはWebサーバを介してアプリケーションへと渡される
②ルーティングとコントローラ
ルーティングがそのリクエストの処理を行うべきコントローラとアクション(メソッド)を特定し、アクションを呼び出す。
③アクション
モデルを利用する。ビューを利用してHTML等を生成する。
④モデル
データベースへの書き込みや呼び出しをする。
⑤レスポンス
コントローラがレスポンスを作成し、Webサーバを介してクライアントへ返す。
コードで通り道を確認
$ rails new scaffold_app $ cd scaffold_app $ bin/rails db:create $ bin/rails generator scaffold user name:string address:string age:integer $ bin/rails db:migrate
コントローラ
class UsersController < ApplicationController before_action :set_user, only: %i[ show edit update destroy ] # GET /users or /users.json def index @users = User.all end 省略
indexアクションがUserというモデルを使って、データベースから情報を取得している。
モデル
class User < ApplicationRecord end
中身がないように思われるが、親クラスを通じてデータベースとのやりとりをしている。
ビュー
<p id="notice"><%= notice %></p> <h1>Users</h1> <table> <thead> <tr> <th>Name</th> <th>Address</th> <th>Age</th> <th colspan="3"></th> </tr> </thead> <tbody> <% @users.each do |user| %> <tr> <td><%= user.name %></td> <td><%= user.address %></td> <td><%= user.age %></td> <td><%= link_to 'Show', user %></td> <td><%= link_to 'Edit', edit_user_path(user) %></td> <td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td> </tr> <% end %> </tbody> </table> <br> <%= link_to 'New User', new_user_path %>
ヘッダやフッタなどの共通部分はレイアウトと呼ばれるファイルにまとめられている。 <%= yield %>の部分にアクションに対するビューファイルの実行結果が埋め込まれる。
<!DOCTYPE html> <html> <head> <title>ScaffoldApp</title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> </head> <body> <%= yield %> </body> </html>