2013-03-11 72 views
2

我在我的Rails应用程序的一些逻辑检查类的类型我CURRENT_USER变量:Case语句评估类工作不正常

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是类的类型(如注释中所示)似乎案例陈述总是评估其他回退。有人可以解释为什么吗?为了给出一点背景,我正在使用Devise实现STI用户模型设置。

回答

6

这是case curent_user不是current_user.class

你的case声明是交叉检查类current_user.class这是Object这是通过您的案例陈述。

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

logger.debug current_user.class.name 
+1

感谢那些工作 - 我不知道它在默认情况下选中类。 – Noz 2013-03-11 19:03:01

+0

如果它有效,那我为什么会低调? – 2013-03-11 19:03:53

+0

是不是我投票,我在这里投票给你。 – Noz 2013-03-11 19:04:34