2013-03-11 71 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