2つコントローラで名前空間をわけてそれぞれでcurrent_userを使っている場合には要注意。
sorceryは
- ActionController::Baseでincludeされてる
- ログイン中のユーザはcurrent_userヘルパメソッドで呼び出す。このメソッド名の変更はできない- ユーザのクラスではauthenticates_with_sorcery!を呼び出す必要がある
 
- ユーザのクラスでは
- いくつかのフィルタアクションはcurrent_userの真偽によって実行するか否かを決定する
とあるプロジェクトではApplicationControllerとAdmin::ApplicationControllerというActionController::Baseを継承した2つのコントローラがあって、
- ApplicationController側はユーザに見せるページの親用- sorceryではないが 別の認証機構を通してログイン中のユーザ(Userクラス)をcurrent_userというメソッドを経由して取得していた。
 
- sorceryではないが 別の認証機構を通してログイン中のユーザ(
- Admin::ApplicationController側は社内の管理者に見えるページの親用- あとからsorceryを導入して、その際管理者(Staffクラス)を取得するのにcurrent_userを使うようになった。
 
- あとからsorceryを導入して、その際管理者(
この状態で動かすとどうなるというかというと、
- Admin::ApplicationController側は問題ない
- ApplicationController側ではsorceryによるフィルタアクションがそれを前提としていない- Userクラスに対して実行されてエラーになる
というわけで、ApplicationController側のcurrent_userのメソッド名を適当な別のものに変えて対応した。
基底クラスであるActionController::Baseに機能を追加されるのも気持ち悪いので、できればincludeするクラスを選択できたらいいなあと思った。