Filters
コントローラ内でCGIのリクエスト・レスポンスに対する前処理・後処理を行うのが Filter 機能です。ユーザ認証、共通の前処理、文字コード変換などの用途に適しています。前処理の場合は before_filter、後処理の場合は after_filter を用い、処理の内容はメソッド・ブロック・クラスの3種類のいずれかで定義します。
例えば、どのページを開こうとしても、必ずログインページにリダイレクトするようなものを書きたい場合に便利みたいです。
ApplicationControllerにFilterの条件を記述し、
class ApplicationController < ActionController::Base
def authorize
unless なんらかの条件
flash[:notice] = "Please log in"
redirect_to(:controller => "login", :action => "login")
end
end
end
とかして、各アクションコントローラに
before_filter :authorize
と追加する。そうすると、各コントローラ内でのCGIリクエスト処理前にApplicationControllerのauthorizeが呼ばれる。そこで、「なんらかの条件」、ログインの場合は、sessionなんかを調べて、なければlogin画面にリダイレクトするようになります。
ただし、loginアクションでもfilterされてしまったら、延々とリダイレクトしてしまうことになるので、:exceptしておく。
before_filter :authorize, :except => :login