📎
複数コントローラーで使う処理をApplicationControllerに定義して共通化
本題
複数コントローラーで似たような処理がある場合は、ApplicationControllerに書くことで共通化できる。
コントローラーがApplicationControllerを継承しているので、継承先から元のメソッドを呼び出せる。
class ApplicationController < ActionController::Base
private
def common(resource)
# 共通処理
end
end
class HogesController < ApplicationController
# 引数がある場合はlambdaで渡す
before_action -> { common(@hoge) }, only: %i[edit update destroy]
# 引数がない場合は以下のような感じ
# before_action :common, only: %i[edit update destroy]
end
class FugasController < ApplicationController
before_action -> { common(@fuga) }, only: %i[edit update destroy]
end
参考記事
before_actionで複数メソッドの呼び出し& before_actionに引数を渡す #Ruby - Qiita
Discussion