我想根据当前用户是否为管理员来更改布局。所以我做了一个简单的方法来检查当前用户是否是admin,然后我在应用程序控制器中调用该方法。我一直收到以下错误:
undefined method `is_admin?' for ApplicationController:Class
我的代码如下所示:
class ApplicationController < ActionController::Base
protect_from_forgery
helper_method :current_user, :is_admin?
if is_admin?
layout 'admin'
end
.....
protected
.....
def is_admin?
if current_user.user_role == 'admin'
return true
end
end
end
我该怎么做?
由于
答案 0 :(得分:1)
当前的方式,在加载类时运行is_admin?
,并且它在类范围内执行(因此它不是类方法,因此是异常)。您需要在请求过程中检查实例方法中的管理状态。
要执行您要执行的操作,您可以让布局调用实例方法,例如
layout :determine_layout
protected
# return "admin" for the layout if `is_admin?`, otherwise "application"
def determine_layout
is_admin? ? 'admin' : 'application'
end
编辑:一些可能有用的链接: