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

时间:2013-03-11 18:54:28

标签: ruby-on-rails ruby devise logic switch-statement

我的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用户模型设置。

1 个答案:

答案 0 :(得分:6)

case curent_user而非current_user.class

您的case语句正在交叉检查current_user.class的{​​{1}}类,该类属于您的个案陈述。

其次,请注意,您可以做的不是Object

case