共通の処理をまとめる(コントローラー編)

はい、こんばんは。

コントローラでの共通の処理のまとめ方をアウトプットします!!

Tasks_controller.rb
def show
@task = current_user.tasks.find(params[:id])
end
def edit
@task.update!(task_params)
end
def update
@task = current_user.tasks.find(params[:id])
@task.update!(task_params)
end
def destroy
@task.update!(task_params)
@task.destroy
end
private
def task_params
params.require(:task).permit(:name, :description)
end

こんな記述があったとします。

共通している処理は

@task = current_user.tasks.find(params[:id])

ですね。

これはRails の DRYの原則(全ての記述は単一且つ明確でなければならない)に基づき、まとめてやる必要があります。

手順は以下の通りです。

①共通の処理をまとめてprivate以下に定義する。

Tasks_controller.rb
private
def task_params
params.require(:task).permit(:name, :description)
end
def set_task
@task = current_user.tasks.find(params[:id])  #共通の処理をまとめた。
end

②before_actionを利用して、set_taskメソッドを各アクションの実行前に呼び出す

Tasks_controller.rb
class TasksController < ApplicationController
before_action :set_task, only: [:show, :edit, :update, :destroy]
#only: []に対して:set_taskを適用するということ
・
・
・
end

③各アクションで定義していた共通の処理を消す

Tasks_controller.rb
class TasksController < ApplicationController
before_action :set_task, only: [:show, :edit, :update, :destroy]
#only: []に対して:set_taskを適用するということ
def show
end
def edit
@task.update!(task_params)
end
def update
@task.update!(task_params)
end
def destroy
@task.update!(task_params)
@task.destroy
end
private
def task_params
params.require(:task).permit(:name, :description)
end
def set_task
@task = current_user.tasks.find(params[:id])  #共通の処理をまとめた。
end

これで共通の処理をまとめることができました。

実際にアプリを動かしてみると、うまくいくはずです。

それでは。

コメント

タイトルとURLをコピーしました