はい、こんばんは。
コントローラでの共通の処理のまとめ方をアウトプットします!!
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
これで共通の処理をまとめることができました。
実際にアプリを動かしてみると、うまくいくはずです。
それでは。
コメント