我的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用户模型设置。
答案 0 :(得分:6)
case curent_user
而非current_user.class
。
您的case
语句正在交叉检查current_user.class
的{{1}}类,该类属于您的个案陈述。
其次,请注意,您可以做的不是Object
:
case