Case语句评估类未按预期工作

Noz*_*Noz 2 ruby logic ruby-on-rails switch-statement devise

我的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"
Run Code Online (Sandbox Code Playgroud)

尽管Instructor是类类型(如注释中所示),但似乎case语句总是评估else的后退.有人可以解释一下原因吗?为了给出一点背景知识,我正在使用Devise实现STI用户模型设置.

ila*_*rci 6

事实case curent_user并非如此current_user.class.

您的case陈述是交叉检查current_user.class哪个类Object属于您的案例陈述.

其次,请注意,而不是case你可以做到的:

logger.debug current_user.class.name
Run Code Online (Sandbox Code Playgroud)

  • `current_user.class`的类是`Class`,而不是`Object`. (6认同)