Ruby on rails 设计/更改重定向管理问题

Ruby on rails 设计/更改重定向管理问题,ruby-on-rails,devise,cancan,Ruby On Rails,Devise,Cancan,我有一个带有布尔开关的用户模型来指定管理员t/f。我当前的应用程序控制器: class ApplicationController < ActionController::Base protect_from_forgery def after_sign_in_path_for(user) if current_user.admin? admin_index_path else dashboard_index_path end

我有一个带有布尔开关的用户模型来指定管理员t/f。我当前的应用程序控制器:

class ApplicationController < ActionController::Base
  protect_from_forgery

  def after_sign_in_path_for(user)
    if current_user.admin?
        admin_index_path
    else
        dashboard_index_path
    end
  end
end
class AdminController < ApplicationController

    def index
        if current_user.admin?

            admin_index_path
        else

            home_index_path
        end
    end
end
class ApplicationController
我当前的管理员控制器:

class ApplicationController < ActionController::Base
  protect_from_forgery

  def after_sign_in_path_for(user)
    if current_user.admin?
        admin_index_path
    else
        dashboard_index_path
    end
  end
end
class AdminController < ApplicationController

    def index
        if current_user.admin?

            admin_index_path
        else

            home_index_path
        end
    end
end
class AdminController
当然,目标是只允许管理员用户访问管理员索引页面。当我以管理员身份登录时,重定向工作正常,但当我以非管理员用户身份导航到admin#index#path时,AdminController中出现NoMethodError错误(对于nil:NilClass,未定义的方法'admin')。在这个问题上有什么帮助吗?我觉得可能有一个更优雅、更安全的坎坎解决方案,但我还没有找到一个很好的解释来说明如何做到这一点。思想?提前谢谢

使用前过滤器


使用资源而不是使用它更通用

在(资源)的路径中签名后定义 如果是当前的_user.admin? 管理索引路径 其他的 仪表板索引路径 结束 结束 及

然后把 过滤前:验证用户身份!在索引操作中。这会解决你的问题。
由于当前用户变量未设置为未登录的用户,因此出现nil类错误。

由于没有当前用户,因此出现此消息。它只是指向零。这对我来说似乎很奇怪,因为如果你使用Desive,它必须指向用户。你在某个地方覆盖了当前用户吗?啊,我想我明白了。实际上,我试图导航到管理路径,但根本没有作为任何用户登录。这可能就是它抛出错误的原因。不确定如何处理未登录的用户,因为我不需要登录才能使用应用程序。思想?