Ruby on rails 未定义的方法'is#u admin?';对于零:零类:(
我想限制对我的面板管理员(gem active_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
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