Ruby on rails 设计管理路线

Ruby on rails 设计管理路线,ruby-on-rails,devise,Ruby On Rails,Devise,我有一个Desive用户,在里面我有admin作为布尔值默认为false。我如何在ruby on rails应用程序中修复我的路由,使其仅允许管理员访问某些页面,而管理员的admin为true 更新: 我改变了我得到的第一个答案,那就是创建一个is_管理员?方法,并指定哪些操作。但是,当我这样做时,我会得到: undefined method `admin' for nil:NilClass 更新2: 产品控制员: class ProductsController < Applicati

我有一个Desive用户,在里面我有admin作为布尔值默认为false。我如何在ruby on rails应用程序中修复我的路由,使其仅允许管理员访问某些页面,而管理员的admin为true

更新: 我改变了我得到的第一个答案,那就是创建一个is_管理员?方法,并指定哪些操作。但是,当我这样做时,我会得到:

undefined method `admin' for nil:NilClass
更新2:

产品控制员:

class ProductsController < ApplicationController
  before_action :is_admin?, only: [:edit, :update, :destroy]
  before_action :set_product, only: [:show]
def is_admin?
  if signed_in?
    redirect_to root_path unless current_user.admin
  end
end

您不应该在routes文件中执行此操作,最好在控制器过滤部分执行此操作。注意
:验证用户身份方法位于is_admin?之前?。否则,
当前用户
将为零

class PagesController < ApplicationController
   before_action :authenticate_user!
   before_action :is_admin?, only: [:action1, :action2]
   ...
  
   private
   
   def is_admin?
     unless current_user.is_admin?
       flash.alert = "Sorry, you don't have permissions to perform this action."
       redirect_to root_path
     end
   end
end
class PagesController
您不应该在routes文件中执行此操作,最好在控制器过滤部分执行此操作。注意
:验证用户身份方法位于is_admin?之前?。否则,
当前用户
将为零

class PagesController < ApplicationController
   before_action :authenticate_user!
   before_action :is_admin?, only: [:action1, :action2]
   ...
  
   private
   
   def is_admin?
     unless current_user.is_admin?
       flash.alert = "Sorry, you don't have permissions to perform this action."
       redirect_to root_path
     end
   end
end
class PagesController
我建议您对与授权相关的所有内容使用gem和策略。

我建议您对与授权相关的所有内容使用gem和策略。

当用户不是另一个应用程序控制器
中的adminput
is_admin?
时,我将未定义的方法“admin”用于nil:NillClass控制器,并添加检查用户是否已签名的条件。@ZehniKhairullah现在显示您的代码和问题的完整堆栈跟踪,以便我们进行检查。@anonymousxxx我没有检查编辑的答案,您必须添加默认的设计验证方法。如果用户不是
ApplicationController
中的adminput
is\u admin?
,则我会为nil:NillClass获取未定义的方法“admin”,以便在需要时在另一个控制器上使用,并添加检查用户是否已签名的
条件。@ZehniKhairullah现在就在您的问题上显示您的代码和完整堆栈跟踪,以便我们进行检查。@anonymousxxx我没有检查编辑的答案,您必须添加默认的设计验证方法。若要消除未定义的方法错误,请将
当前用户.admin
更改为
当前用户。请尝试(:admin)
您的
signed\u-in?
方法似乎没有检查当前\u用户的存在以消除未定义的方法错误将
current\u-user.admin更改为
current\u-user.try(:admin)
您的
signed\u-in?
方法似乎没有检查当前\u用户的存在