プログラミング学習記録

自動車メーカー勤務しながらプログラミング学習中。学習記録を残していきます。

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>