ruby on railsのActionControllerにモジュールでbefore_filterを実装する方法

dorubyに投稿しました。

というわけで内容



railsのコントローラーにmoduleをinlcudeする時、
moduleにbefore_filterを書いても、AplicationControllerを
継承していないのでエラーが出ます。

moduleで共通化してるわけですから、before_filterもmodule側で
済ませちゃいたいですよね。


というわけでやり方です。
コントローラと違って、モジュールはActionControllerを継承してないことが
原因でエラーが出ているので、コントローラー側で定義してしまえばエラーが
出ません。


じゃあ、インクルード後に、インクルードしたコントローラ自身に定義する様
書いてあげましょう。

module NantokaModule
  def self.included(base)
    base.class_eval{
      before_filter :filter_name
    }
  end
end

self.includedというメソッドは、moduleをincludeした時に呼び出されるメソッドです。
で、baseは、呼び出した側のクラスが入ってきますので、そちらに対して、class_evalを
実行します。
そうすると、クラスにbefore_filter〜〜が宣言されることになります。


というわけで昔書いたエントリの焼き直しー。