#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