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なコードを記述することができます。