ruby-on-rails - 评估类的案例陈述未按预期工作

标签 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 用户模型设置。

最佳答案

它是 case curent_user 而不是 current_user.class

您的 case 语句正在交叉检查属于 Objectcurrent_user.class 类,它属于您的 case 语句。

其次,请注意您可以这样做,而不是 case:

logger.debug current_user.class.name

关于ruby-on-rails - 评估类的案例陈述未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15346324/

相关文章:

json - Rail 4 为 POST、PUT、DELETE JSON 请求设计 nil current_user

ruby-on-rails - FactoryGirl create_list 具有不同的值

ruby-on-rails - Rails Assets 管道不加载 javascript 依赖项

ruby-on-rails - Rails 4 - 设计, guest 用户导致过滤器链停止

html - CSS 在我的 RoR 应用程序中无法正常工作

ruby - 如何使用 Mechanize 登录和抓取站点

ruby-on-rails - 更改了设计邮件模板路径,现在设计邀请电子邮件主题行失败

javascript - Webpack 4 不按顺序加载页面

javascript - 如何重新加载插入 javascript 的 ruby​​ - turbolinks

ruby - 除法运算符被认为是正则表达式定界符