ruby-on-rails - 未初始化的常量能力轨

标签 ruby-on-rails ruby devise cancan

我针对此问题尝试了不同的解决方案,但没有一个有效,因此请不要尝试将问题视为重复问题来关闭。

我的用户表中有角色列。因此,用户可以通过 adminuser 进行操作,我需要使用 CanCan 在用户角色的基础上添加权限。我想将所有权限授予管理员。我以管理员身份登录,但是当我访问 /users 时,我收到错误 uninitializedconstantability 并且当我删除 load_and_authorize_resource 时,我的 cancan 权限没有不工作。我的能力等级看起来像

class Ability
  include CanCan::Ability

  def initialize(user)
    #abort("Message goes here")
    user ||= User.new # guest user
    #abort('some user')
    if user.role == 'admin'
      can :manage, :all
    elsif user.role == 'user'
      can :manage, Micropost do |micropost|
        micropost.try(:owner) == user
      end
      can :update, User do |users|
        users.try(:owner) == user
      end
    else
     can :read, :all
    end
  end
end

在我的UsersController中我有

class UsersController < ApplicationController
  load_and_authorize_resource
  #devise code
  before_filter :authenticate_user!, only: [:index, :edit, :update, :destroy, :following, :followers]
  blah blah
 end

我的路线文件看起来像

FirstApp::Application.routes.draw do

  devise_for :users

  resources :users do
  member do
    get :following, :followers
  end
end
#resources :sessions, only: [:new, :create, :destroy]
resources :microposts, only: [:create, :destroy]
resources :relationships, only: [:create, :destroy]

root to: "static_pages#home"

match '/help', to: 'static_pages#help'
match '/about', to: 'static_pages#about'
match '/contact', to: 'static_pages#contact'
end

最佳答案

您看到未初始化的常量Ability,因为UsersController中的load_and_authorize_resource方法期望找到一个Ability类。

解决方案是将包含能力定义的文件移动到 app/models/ability.rb

#app/models/ability.rb
class Ability
  include CanCan::Ability

  def initialize(user)
    #abort("Message goes here")
    user ||= User.new # guest user
    #abort('some user')
    if user.role == 'admin'
      can :manage, :all
    elsif user.role == 'user'
      can :manage, Micropost do |micropost|
        micropost.try(:owner) == user
      end
      can :update, User do |users|
        users.try(:owner) == user
      end
    else
     can :read, :all
    end
  end
end

关于ruby-on-rails - 未初始化的常量能力轨,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27504292/

相关文章:

ruby-on-rails - Rails : Setting attribute in after_create

ruby-on-rails - 在 ApplicationController 中注册不同类型的回调

ruby - ruby 的 case 陈述会落空吗?

ruby-on-rails - 使用 Capybara 将 GET 参数传递给 Controller

ruby-on-rails - 在开发中使用 Devise 1.3.4 使用 Gmail 发送电子邮件

ruby-on-rails - FactoryGirl : Creating dynamic factories with parameters?

ruby-on-rails - 如何检查 mongoid 中的文档中是否存在嵌入的文档?

ruby - Rails CSV 导入没有双引号问题

ruby-on-rails - Rails 设计在开发中不发送电子邮件确认

ruby-on-rails - 有_许多/:through rails4