2

Railsアプリケーションには、current_user変数のクラスタイプをチェックするロジックがあります。

logger.debug current_user.class # => Instructor
logger.debug current_user.class == Instructor # => true
case current_user.class
  when Admin
    logger.debug "Admin"
  when Student
    logger.debug "Student"
  when Instructor
    logger.debug "Instructor"
  else
    logger.debug "Guest"
end #=> "Guest"

Instructor(コメントに示されているように)クラスタイプであるにもかかわらず、caseステートメントは常にelseフォールバックを評価しているようです。誰かが理由を説明できますか?少し背景を説明するために、Deviseを使用してSTIユーザーモデルのセットアップを実装しています。

4

1 に答える 1

6

そうでcase curent_userはありませんcurrent_user.class

あなたのステートメントは、あなたのcaseステートメントに該当するクラスをcaseクロスチェックしています。current_user.classObject

第二に、あなたの代わりにあなたがすることができたかもしれないことに注意してくださいcase

logger.debug current_user.class.name
于 2013-03-11T19:00:42.697 に答える