before_filter内でのrenderとredirect_to

before_filter内でエラーメッセージをrenderしたりエラーページにリダイレクトした場合は同時にreturn falseする必要があります。そうしないと、以降のフィルタが実行されて描画が2度以上行われるというエラーになります。

ゆきひろ認証の例で言えばこの部分。

define_method :yukihiro_login do
  if params[:matz] == 'yukihiro'
    session[:i_love_ruby] = :ofcourse
    redirect_to params[:from] and return false # ←この「and return false」
  else
    yukihiro_render_check
  end
end


ていうか、Railsはそんなことまでエラーメッセージで教えてくれるんすね。すばらしい。