railsで簡単にCRUD処理ができるようになる(コントローラー編)
このhogeもしくはhogesを任意の名前(taskでもboardでもなんでもいい)に変えるだけで、CRUD処理実装におけるコントローラーがマルっと解決する。
hogeもしくはhogesは、userと一対多(user:hoge = 1 : N )の関係にあるものとする。
class HogesController < ApplicationController
before_action :set_hoge, only: %i[edit update destroy index show]
def index
//全件表示
@hoges = Hoge.all
end
def show
//投稿されたものの詳細を表示
@hoge = Hoge.find(params[:id])
end
def new
//新しくインスタンス(投稿する記事など)を作成
@hoge = Hoge.new
end
def create
//form_withで作成した新しいデータ(hoge_paramsにストロングパラメータとして格納されている。)がpostされてきた
//新しいデータなので、updateではなくてcreateアクションで処理する。
@hoge = current_user.hoges.build(hoge_params)
if @hoge.save
redirect_to @hoge, success: t('defaults.message.created', item: Hoge.model_name.human)
else
flash.now[:danger] = t('defaults.message.not_created', item: Hoge.model_name.human)
render :new
end
end
# current_userの編集、削除ボタンの表示
def edit; end
def update
//form_withからすでに存在しているデータ(パスからidを受け取ってeditする。)がpostされてきた
// updateで処理を開始する。
if @hoge.update(hoge_params)
redirect_to hoge_path(@hoge), success: t('defaults.message.updated', item: Hoge.model_name.human)
else
flash.now[:danger] = t('defaults.message.not_updated', item: Hoge.model_name.human)
render :edit
end
end
def destroy
@hoge.destroy!
redirect_to hoges_path, success: t('defaults.message.deleted', item:Hoge.model_name.human)
end
private
def set_hoge
@hoge = current_user.hoges.find(params[:id])
end
def hoge_params
params.require(:hoge).permit(:title, :body, :category)
end
end