after_filterは、各アクションのrenderの後に実行されるようです。下記でhogeアクションを実行するとActionController::DoubleRenderErrorになります。
class HogeController < ApplicationController after_filter :render_test def hoge end end class ApplicationController < ActionController::Base def render_test render :template => 'test' return end end
もちろん、after_filterなど使わずhogeアクション内にrenderメソッドを記述してあげればエラーは出なくなるのですが・・・複数のアクションを使うときはめんどくさい><
railsのフィルタの使い方いろいろ
上記のafter_filterでハマっている最中に新しく覚えたことをメモ。
フィルタの定義は下記のように書くのがよくあるパターンだと思います。
before_filter :hoge
ブロックを使う書き方もあるようです。この場合、パラメータにはコントローラが入ります。
before_filter do |controller| #... end
メソッドの代わりにクラスを指定することもできるみたいです。
before_filter HogeController
この場合、コントローラをパラメータとして、指定されたクラスのfilterメソッドが呼び出されるようです。なので下記のようにfilterメソッドを定義してあげるとよいみたい。
class HogeController < ApplicationController def self.filter(controller) #... end end
複数のコントローラでフィルタを共有するときに使えるのかな。
追記(2008/6/27)
結局renderメソッドを再定義することで解決しました。時間があったら詳しくまとめます。