Restful Authenticationでは、がfalseに設定されているcurrent_user場合@current_user、(通常はDBから)ユーザーを再度検索しないことを意味しますが、それは問題ないことを意味し、DBで再度nil検索できることを意味します。
の8行目lib/authenticated_system.rb
def current_user
@current_user ||= (login_from_session
|| login_from_basic_auth
|| login_from_cookie) unless @current_user == false
end
複雑なことは、などからDBを検索しようとしてそれlogin_from_sessionが見つからない場合、割り当てられる最終値@current_userはnilであり、メソッドはnil(メソッドで最後に評価された値)を返します。@current_userコード内に実際にfalseに設定できる場所が他に2つあり、それによってがトリガーされunless、ステートメント全体が。のままでnil、メソッドが...を返す場合を除きます。@current_userfalsenil
コードがこれらの複雑な事実に依存することについて、私はほとんど言葉を失いました。 falseは特別な意味をnil持ち、コードでは特別な意味を持ちますが、文書化もコメントもされておらず、であり続けることができcurrent_userます。それは実際にはデザインパターンなので、人々はそれをよく知っていて、よく知っていますか?nil@current_userfalse