Scaffoldで作成されたファイルの中身を確認する

Scaffold ツールを使用すると、アプリケーションの基本機能を実現するための必要なファイルが自動的に作成されます。ここでは Scaffold で作成されたファイルの中身を確認します。

(Last modified: )

Scaffoldコマンドで作成されたファイルの一覧

今回 Scaffold コマンドを実行して作成されたファイルの一覧は次の通りです。

invoke  active_record
create  db/migrate/20240615005508_create_personals.rb
create  app/models/personal.rb
invoke  test_unit
create  test/models/personal_test.rb
create  test/fixtures/personals.yml
invoke  resource_route
route   resources :personals
invoke  scaffold_controller
create  app/controllers/personals_controller.rb
invoke  erb
create  app/views/personals
create  app/views/personals/index.html.erb
create  app/views/personals/edit.html.erb
create  app/views/personals/show.html.erb
create  app/views/personals/new.html.erb
create  app/views/personals/_form.html.erb
create  app/views/personals/_personal.html.erb
invoke  resource_route
invoke  test_unit
create  test/controllers/personals_controller_test.rb
create  test/system/personals_test.rb
invoke  helper
create  app/helpers/personals_helper.rb
invoke  test_unit
invoke  jbuilder
create  app/views/personals/index.json.jbuilder
create  app/views/personals/show.json.jbuilder
create  app/views/personals/_personal.json.jbuilder

作成されたファイルはテキストファイルですので、順番にどのようなファイルが作成されたのかを確認していきます。

モデルとマイグレーションファイル

作成されたファイルの中で、次の 2 つがモデルとマイグレーションファイルです。

db/migrate/20240615005508_create_personals.rb
app/models/personal.rb

最初にモデルに関する app/models/personal.rb ファイルをテキストエディタで開いてみます。

モデルとマイグレーションファイル(1)

class Personal < ApplicationRecord
end

クラスの中身は何もありませんが、 ActiveRecord で定義されているメソッドをそのまま利用できるため、特に何も記述しなくてもデータの作成やデータの取得といった基本的な処理を行なうことができます。

次にマイグレーションファイルである db/migrate/20240615005508_create_personals.rb ファイルをテキストエディタで開いてみます。

モデルとマイグレーションファイル(2)

class CreatePersonals < ActiveRecord::Migration[7.1]
  def change
    create_table :personals do |t|
      t.string :name
      t.string :address

      t.timestamps
    end
  end
end

Scaffold コマンドを実行したときに引数に指定したカラム名とデータ型を元にファイルが作成されています。

このマイグレーションファイルを元にテーブルを作成してあります。

コントロールとアクション

次のファイルがコントロールに関して記述されたファイルです。

app/controllers/personals_controller.rb

コントロールに関する app/controllers/personals_controller.rb ファイルをテキストエディタで開いてみます。

モデルとマイグレーションファイル(1)

class PersonalsController < ApplicationController
  before_action :set_personal, only: %i[ show edit update destroy ]

  # GET /personals or /personals.json
  def index
    @personals = Personal.all
  end

  # GET /personals/1 or /personals/1.json
  def show
  end

  # GET /personals/new
  def new
    @personal = Personal.new
  end

  # GET /personals/1/edit
  def edit
  end

  # POST /personals or /personals.json
  def create
    @personal = Personal.new(personal_params)

    respond_to do |format|
      if @personal.save
        format.html { redirect_to personal_url(@personal), notice: "Personal was successfully created." }
        format.json { render :show, status: :created, location: @personal }
      else
        format.html { render :new, status: :unprocessable_entity }
        format.json { render json: @personal.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /personals/1 or /personals/1.json
  def update
    respond_to do |format|
      if @personal.update(personal_params)
        format.html { redirect_to personal_url(@personal), notice: "Personal was successfully updated." }
        format.json { render :show, status: :ok, location: @personal }
      else
        format.html { render :edit, status: :unprocessable_entity }
        format.json { render json: @personal.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /personals/1 or /personals/1.json
  def destroy
    @personal.destroy!

    respond_to do |format|
      format.html { redirect_to personals_url, notice: "Personal was successfully destroyed." }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_personal
      @personal = Personal.find(params[:id])
    end

    # Only allow a list of trusted parameters through.
    def personal_params
      params.require(:personal).permit(:name, :address)
    end
end

コントロールの中には「index」「show」「new」「edit」「create」「update」「destroy」のアクションメソッドが自動的に定義されています。これらのアクションを呼び出すことでデータの追加や取得を行なうことができます。

ビュー

次のファイルがビューに関して記述されたファイルです。

create  app/views/personals/index.html.erb
create  app/views/personals/edit.html.erb
create  app/views/personals/show.html.erb
create  app/views/personals/new.html.erb
create  app/views/personals/_form.html.erb
create  app/views/personals/_personal.html.erb

この中の app/views/personals/new.html.erb ファイルをテキストエディタで開いてみます。

ビュー(1)

<h1>New personal</h1>

<%= render "form", personal: @personal %>

<br>

<div>
  <%= link_to "Back to personals", personals_path %>
</div>

「render 'form'」の部分で「_form.html.erb」を読み込んでいます。

次に app/views/personals/edit.html.erb ファイルをテキストエディタで開いてみます。

次に「edit.html.erb」ファイルをテキストエディタで開いてみます。

ビュー(2)

<h1>Editing personal</h1>

<%= render "form", personal: @personal %>

<br>

<div>
  <%= link_to "Show this personal", @personal %> |
  <%= link_to "Back to personals", personals_path %>
</div>

こちらのファイルでも同じように「render 'form'」の部分で「_form.html.erb」を読み込んでいます。

この「_form.html.erb」はデータを新規に登録したり既存のデータを更新するためのフォームを表示するものです。フォームの部分は共通しているため、別のファイルとして作成しておき、「new.html.erb」ファイル及び「edit.html.erb」ファイルから読み込んでいます。

Scaffold コマンドを実行した時に作成される主なファイルについて見てみました。コントロールやアクション、ビュー、モデルなどが一通り作成されており、これだけでデータの追加や閲覧といった基本的な機能を持つアプリケーションが作成されています。

-- --

Scaffold で作成されたファイルの中身を確認しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。