この記事はアピリッツの技術ブログ「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~~が宣言されることになります。
…