📎

複数コントローラーで使う処理を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