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
にアクセスすると以下のようにページが出来上がっていることがわかる。
できたページ
先ほど表示したページでNew Book
をクリックすることで、本の新規作成ページに遷移する。
ここで、本を作成することができる。
実際に本を作成すると、以下のように本の作成に成功したとメッセージを表示することができる。
次にedit
をクリックすると、以下のように本のタイトルを編集することができる。
Update Book
をクリックすることで、本のタイトルを編集することができる。
編集に成功すると以下のようにメッセージが表示される。
Back
を押すとShow
Edit
Destroy
と表示されており、Destroy
を押すことで作成した本を削除するこができる。
アプリのファイルの内容
できたアプリの内容を確認していく。
モデルファイルのapp/models/book.rb
も作成されている。
コントローラファイルには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を扱うビューファイルが作成されている。
このようにscaffoldで作成されたファイルを編集していくこと自分が作りたいアプリを作っていくことができて便利だなと思った。