Develop with pleasure!

福岡でCloudとかBlockchainとか。

AuthLogicでActionView::TemplateError (You must activate the Authlogic::Session::Base.controller with a controller object before creating objects)

RailsActionController::RoutingErrorやActionController::MethodNotAllowedといったエラーが発生した際に、rescue_action_in_publicメソッドでキャッチして、カスタムしたエラーページを描画するよう修正してみたが、エラーページを描画する際に、

ActionView::TemplateError (You must activate the Authlogic::Session::Base.controller with a controller object before creating objects) 


といったエラーが発生する。エラー画面を描画する際に、AuthLogicのUserSessionにアクセスしてるんだけど、その際に↑のエラーが発生する。

Googleせんせーに聞いてみると、

before_filter :activate_authlogic

といったコードが良く見つかる。ただ、activate_authlogicという処理自体は、authlogic側のrails_adapter.rbの中で

klass.prepend_before_filter :activate_authlogic

と自動的にロードされるように組み込まれてるので、before_filterとして記載しても意味がない。


で、RoutingErrorやMethodNotAllowedの場合ってApplicationControllerに記載したbefore_filterが実行されない=activate_authlogicも実行されないのでエラーになってるんだろう。

ということで、

def rescue_action_in_public(e)
  activate_authlogic
...
end


な感じで、rescue_action_in_publicメソッド内の先頭でactivate_authlogicをコールしてあげれば解決する。