【发布时间】:2017-09-06 14:24:01
【问题描述】:
所以在我的 rails 应用程序中,我的用户拥有不同的权限。当有人登录时,一切正常。但是,当没有人登录时,我收到以下错误:
Undefined method 'editor?' for nil:NilClass
def require_editor
redirect_to '/error' unless current_user.editor? || current_user.admin?
end
我想我完全理解为什么会发生这种情况:因为没有人登录,Rails 试图弄清楚他们拥有什么角色,并且因为没有人登录它没有角色,Rails 不知道它是否是否应该显示页面。
我的问题是:如何为未登录的人设置默认角色,并将他们发送到显示他们没有权限的错误页面?
【问题讨论】:
-
其实
current_user只是nil而nil不会响应editor?或admin?。nil是 Ruby 描述“无”的方式。但是“有人没有记录它”并不是什么都没有。那nothing is something(顺便说一句讲得很好)。使用对象代替缺少的对象被称为Null Object pattern,这是解决此问题的一种优雅方法。current_user来自哪里?你在用设计吗? -
@Stefan:哈,我知道 Sandi Metz 会说“什么都不是”。而且,当然,是她 :)
标签: ruby-on-rails ruby