ActiveSupport::Concernとは?

ActiveSupport::Concernとは ?

ActiveSupport::Concernを使うことで、複数のcontrollerで利用する処理をモジュール化することができます。

モジュールを作成する

app/controllers/concernsにモジュールを設置します。

# モジュール名はキャメルケースです
module HogeHoge

  # 以下は共通モジュールを使用するための記述を肩代わりしてくれるモジュールです
  # モジュール内がインスタンスメソッドの定義だけであれば省略可能です
  extend ActiveSupport::Concern
  
  def fugafuga
    # fugafugaメソッドはcontrollerからコールできます
  end

  private
    def foo
      # fooメソッドはモジュール内からのみコールできます
    end
end

モジュールをcontrollerからコールする

class TestController < ApplicationController
  # 利用したいモジュールを事前にinclude
  include HogeHoge

  def action
    # 事前にHogeHogeモジュールをincludeしているため、fugafugaメソッドがコール可能
    fugafuga
  end
end

includedブロック

module HogeHoge
  extend ActiveSupport::Concern

  included do
     # HogeHogeモジュールがincludeされた後に、このブロックが実行される
     # 主にscope, collback等を記述する
  end
  
  def fugafuga
  end

  private
    def foo
    end
end

このようにActiveSupport::Concernを利用することで、DRYなコードを記述することができます。