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_user
false
nil
コードがこれらの複雑な事実に依存することについて、私はほとんど言葉を失いました。 false
は特別な意味をnil
持ち、コードでは特別な意味を持ちますが、文書化もコメントもされておらず、であり続けることができcurrent_user
ます。それは実際にはデザインパターンなので、人々はそれをよく知っていて、よく知っていますか?nil
@current_user
false