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陈述是交叉检查属于您的案例陈述的current_user.class类别Object

其次,请注意,case您可以这样做:

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