0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】rails g scaffoldの使い方、機能、注意点

Last updated at Posted at 2020-10-01

#scaffoldとは
一言で言えば、必要なファイルをすべて作成し、DBも含めたルーティングも済ませてくれるコマンド。

#生成方法

$rails g scaffold モデル名 カラム名1:データ型 カラム名2:データ型 ....

###生成されるファイル
モデル
マイグレーションファイル
コントローラー
ビュー
ルーティング

##生成されたファイルの中身
仮にusersinfoというモデル名でnameカラムageカラムを生成した場合。

$rails g scaffold usersinfo name:string age:integer

####モデル
特別な記述はないので省略。

####マイグレーションファイル

*******_*******.rb
class CreateUsersinfos < ActiveRecord::Migration[5.1]
  def change
    create_table :usersinfos do |t|
      t.string :name #生成時に指定したカラム名とデーター型が記述される
      t.integer :age

      t.timestamps
    end
  end
end

####コントローラー
生成時点でここまで記述済み

*******_controller.rb
class UsersinfosController < ApplicationController
  before_action :set_usersinfo, only: [:show, :edit, :update, :destroy]

  # GET /usersinfos
  # GET /usersinfos.json
  def index
    @usersinfos = Usersinfo.all
  end

  # GET /usersinfos/1
  # GET /usersinfos/1.json
  def show
  end

  # GET /usersinfos/new
  def new
    @usersinfo = Usersinfo.new
  end

  # GET /usersinfos/1/edit
  def edit
  end

  # POST /usersinfos
  # POST /usersinfos.json
  def create
    @usersinfo = Usersinfo.new(usersinfo_params)

    respond_to do |format|
      if @usersinfo.save
        format.html { redirect_to @usersinfo, notice: 'Usersinfo was successfully created.' }
        format.json { render :show, status: :created, location: @usersinfo }
      else
        format.html { render :new }
        format.json { render json: @usersinfo.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /usersinfos/1
  # PATCH/PUT /usersinfos/1.json
  def update
    respond_to do |format|
      if @usersinfo.update(usersinfo_params)
        format.html { redirect_to @usersinfo, notice: 'Usersinfo was successfully updated.' }
        format.json { render :show, status: :ok, location: @usersinfo }
      else
        format.html { render :edit }
        format.json { render json: @usersinfo.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /usersinfos/1
  # DELETE /usersinfos/1.json
  def destroy
    @usersinfo.destroy
    respond_to do |format|
      format.html { redirect_to usersinfos_url, notice: 'Usersinfo was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

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

    # Only allow a list of trusted parameters through.
    def usersinfo_params
      params.require(:usersinfo).permit(:name, :age)
    end
end

####ビュー
コントローラーに記述されたビューはすべて自動生成される。

####ルーティング
ルーティングは自身で記述する必要がある。

routes.rb
resources :ビュー名 #自身で記述

#注意点
##params.requireへの追加
railsでは、入力内容の確認をする機能があり、scaffoldでコントローラー内のprivateに生成される。
カラムをscaffoldの実行後に追加した場合、このprivateのメソッド内にカラム名を追加しなければDBに保存されない。

***.controller.rb
private
 def usersinfo_params
  params.require(:usersinfo).permit(:name, :age, :location, :description, :certification, :note) 
#permit内には、scaffold実行時に記述したカラム(:name, :age)しか記述されないため、追加したカラムを追記する必要がある。
 end
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?