rosh-1228のメモ

自身の勉強したことをメモしてます。

scaffoldについて復習

Railsについて勉強したので復習のために書いていく。

scaffold

Railsドキュメントによると、以下のように記述がある。

アプリケーションの基本的な機能の一覧(index)、詳細(show)、新規作成(new/create)、編集(edit/update)、削除(destroy)するために必要なコントローラ、モデル、ビューをまとめて生成

基本的な機能としてCRUD機能を自動で作成してくれる機能みたい。

CRUD機能を持つアプリを作成したい時は、scaffoldを使うと便利そう。

試しに実行した結果を以下に掲示していく。

コマンド

まず、rails newでアプリを作成しないと使えないので、rails newでbooks_appを作成する。

$ rails new books_app

次に、作成されたbooks_appフォルダに移動し、scaffoldコマンドを実行する。

後続についていてるtitle:stringは、DBを作成するマイグレーションファイルを作成する時に使用される。

$ cd books_app/
$ rails g scaffold book title:string

この状態では、マイグレーションファイルが作られただけなので、サーバを起動してもDBにテーブルがない状態になる。 そのため、migrateしてDBにテーブルを作成する。

rails db:migrate

これでサーバを起動する準備ができたので、サーバを起動する。

rails s

http://localhost:3000/booksにアクセスすると以下のようにページが出来上がっていることがわかる。

f:id:rosh-1228:20220204104537p:plain

できたページ

先ほど表示したページでNew Bookをクリックすることで、本の新規作成ページに遷移する。

ここで、本を作成することができる。

f:id:rosh-1228:20220204104737p:plain

実際に本を作成すると、以下のように本の作成に成功したとメッセージを表示することができる。

f:id:rosh-1228:20220204104804p:plain

次にeditをクリックすると、以下のように本のタイトルを編集することができる。

f:id:rosh-1228:20220204104836p:plain

Update Bookをクリックすることで、本のタイトルを編集することができる。

編集に成功すると以下のようにメッセージが表示される。 f:id:rosh-1228:20220204104922p:plain

Backを押すとShow Edit Destroyと表示されており、Destroyを押すことで作成した本を削除するこができる。

f:id:rosh-1228:20220204104948p:plain

f:id:rosh-1228:20220204105023p:plain

アプリのファイルの内容

できたアプリの内容を確認していく。 モデルファイルのapp/models/book.rbも作成されている。

f:id:rosh-1228:20220204112816p:plain

コントローラファイルにはapp/controller/books_controller.rbが作成されており、CRUDを扱うメソッドが用意されている。

def show; endのように、使っていないメソッドを1行にすることもできる。

class BooksController < ApplicationController
  before_action :set_book, only: %i[ show edit update destroy ]

  # GET /books or /books.json
  def index
    @books = Book.all
  end

  # GET /books/1 or /books/1.json
  def show; end

  # GET /books/new
  def new
    @book = Book.new
  end

  # GET /books/1/edit
  def edit; end

  # POST /books or /books.json
  def create
    @book = Book.new(book_params)

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

  # PATCH/PUT /books/1 or /books/1.json
  def update
    respond_to do |format|
      if @book.update(book_params)
        format.html { redirect_to book_url(@book), notice: "Book was successfully updated." }
        format.json { render :show, status: :ok, location: @book }
      else
        format.html { render :edit, status: :unprocessable_entity }
        format.json { render json: @book.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /books/1 or /books/1.json
  def destroy
    @book.destroy

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

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

    # Only allow a list of trusted parameters through.
    def book_params
      params.require(:book).permit(:title)
    end
end

app/views/books/にはCRUDを扱うビューファイルが作成されている。

f:id:rosh-1228:20220204110447p:plain

このようにscaffoldで作成されたファイルを編集していくこと自分が作りたいアプリを作っていくことができて便利だなと思った。