cancancan load_and_authorize_resource NameError

Evo*_*tio 2 ruby-on-rails cancan ruby-on-rails-4 cancancan

我使用CanCanCan,Devise和Rolify gem进行身份验证和权限管理.但是当我创建一个新控制器时,我收到了这条消息:

NameError in PanelController#dashboard
uninitialized constant Panel
Run Code Online (Sandbox Code Playgroud)

我的PanelController:

class PanelController < ApplicationController
  load_and_authorize_resource

  def dashboard
  end
end
Run Code Online (Sandbox Code Playgroud)

当我删除此行时:load_and_authorize_resource 路由工作.但我无需身份验证即可访问它.我需要PanelModel才能使用它吗?

我的AbilityModel是这样的:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)

    alias_action :create, :read, :update, :destroy, :to => :crud

    if user.has_role? :admin
      can :manage, :all
    elsif user.has_role? :user
      can [:read], User
      can [:update, :edit], User do |account|
        account.email == user.email
      end
    else
      # can :read, :all
      can [:create, :new], User
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

昨天我的代码工作得很好,但今天我不知道为什么会出现这个错误.也许任何人都可以帮助我.

我的路由是控制器:

  devise_scope :user do
    authenticated :user do
      # Rails 4 users must specify the 'as' option to give it a unique name
      root :to => "panels#dashboard", :as => :panel
    end

    unauthenticated do
      root 'devise/sessions#new', as: :unauthenticated_root
    end
  end
Run Code Online (Sandbox Code Playgroud)

bum*_*mpy 6

您可以通过使用CanCanCan没有相应的模型authorize_resource :class => false像这样

class PanelController < ApplicationController
  authorize_resource :class => false

  def dashboard
  end
end
Run Code Online (Sandbox Code Playgroud)

然后在你的能力:

elsif user.has_role? :user
  can :dashboard, :panel
Run Code Online (Sandbox Code Playgroud)