Ruby on rails 未定义的方法'is#u admin?';对于零:零类:(

Ruby on rails 未定义的方法'is#u admin?';对于零:零类:(,ruby-on-rails,ruby-on-rails-4,admin,activeadmin,Ruby On Rails,Ruby On Rails 4,Admin,Activeadmin,我想限制对我的面板管理员(gem active_admin)的访问权限,仅供管理员使用 这是我的密码 class ApplicationController < ActionController::Base def authenticate_admin! unless current_user.is_admin? flash[:error] = "Access denied" redirect_to root_path

我想限制对我的面板管理员(gem active_admin)的访问权限,仅供管理员使用

这是我的密码

class ApplicationController < ActionController::Base
    def authenticate_admin!
        unless current_user.is_admin?
            flash[:error] = "Access denied"
            redirect_to root_path
        end
    end
class ApplicationController
问题是:未定义nil:NilClass的'is_admin'方法

我的数据库中有一个布尔管理员(0为假,1为真)

我必须定义我的is_admin?,但我尝试了,却没有找到他。那么我该在哪里做呢


Thx为您提供帮助

问题出现在您的错误消息中。nil没有“is_admin?”方法。这意味着您当前的用户变量没有被设置。您需要将未登录的用户重定向到一个屏幕,以便他们可以这样做。然后通过此
authenticate_admin!
函数引导他们,或者首先重新登录t将所有管理用户添加到
/admin
路径,或将所有用户推送到您的主页,允许他们单击管理链接。

可能是当前用户设置正确,但在没有登录用户时会调用此方法

您应该将此方法与另一个要求用户登录的筛选器结合使用,即要求定义当前用户。这通常称为
require\u user

例如,在应用程序控制器中(因此它被所有控制器继承)

然后,您可以使用
skip\u before\u filter
对未登录的操作进行例外处理


现在,您可以在管理控制器中添加authenticate\u admin!作为一个before筛选器:它只有在require\u用户已通过时才会被调用,因此它应该是安全的。

尝试在\u操作之前添加
:authenticate\u user!
(如果您的用户调用了“user”)
之前:authenticificate\u admin!
方法。此更改后,您的应用程序将首先将未登录的用户重定向到登录表单,然后才会询问您的用户“他是管理员吗?”。

添加尝试:

我已在应用程序控件中设置了我的当前用户。如果我不使用,请确保当前用户在调用is\u admin?之前不为零目前,我处于一个无限循环中,因此我认为这是因为我当前的用户是nill。我必须首先解决这个问题,我认为循环正在发生,因为您的主页正在触发“require\u user”也要进行筛选。这是一个使用
在筛选之前跳过筛选的示例。例如,在处理主页的任何控制器中-
在筛选之前跳过筛选:require\u user,:only=>[:index]
(假设索引操作处理“/”url)除了我的最后一点评论,我想说的是,这是一个示例,说明了有人可能会如何使用
require\u user
authenticate\u admin!
。显然,我不知道您的要求,所以您需要自己决定。
before_filter :require_user

protected
def require_user
  unless current_user
    redirect_to "/" and return
  end
end