Filterクラスでの redirect_to や flash

コントローラーでの beforeフィルターでちょっと条件をチェックして、場合によっては余所にリダイレクトしようと思った。Railsレシピブック029 によれば、Rails2.0以上ならフィルターメソッドの中で直接 redirect_to すれば良いと言う事だ。
また、幾つかのコントローラーで共有するチェックなので、フィルター自体クラスにして別ファイルにした。

class <何かの>Controller
 before <チェック>Filter

 <普通にコントローラー沢山>

end

そしてフィルタークラスの中で redirect_to してみたがそんなメソッドは無いと言われる、エラー。
redirect_to 自体は ActionController::Base のメソッドだからと、フィルターに引数として渡されるコントローラーをレシーバに明記してみる。protectedメソッドだから呼べないとエラー。確かに http://api.rubyonrails.org/ でも Protected Instance methods のところに書いてある。おかしいよね。
仕方ないので send で呼び出す事にする、何とかなった。
これは flashメッセージについても同様だった。

class <チェック>Filter
  def before(controller)
    <いろいろチェック>
    controller.send(:flash)[:error] = '<チェック> Error'
    controller.send :redirect_to, :controller => :<何か>, :action => :index, <いろいろ> 
  end
end