Ruby on rails CANCAN未定义的方法`用户类型?';至于;“管理员”:一串

Ruby on rails CANCAN未定义的方法`用户类型?';至于;“管理员”:一串,ruby-on-rails,authorization,gem,cancan,Ruby On Rails,Authorization,Gem,Cancan,我的问题是: 我用的是坎坎宝石。我认为所有设置都很好,除了一件事,那就是为“admin”生成未定义的方法'user\u type':String 这是我的能力 class Ability include CanCan::Ability def initialize(user) user ||= User.new # guest user if user.user_type? :admin can :manage, :all #

我的问题是:

我用的是坎坎宝石。我认为所有设置都很好,除了一件事,那就是为“admin”生成
未定义的方法'user\u type':String

这是我的能力

class Ability
  include CanCan::Ability
  def initialize(user)
       user ||= User.new # guest user
       if user.user_type? :admin
         can :manage, :all
       # [code code code code commented to find more easily the problem]
        else
          can :read, :all
        end
  end
end
我的用户.rb

require 'digest/sha2'

class User < ActiveRecord::Base
  #definisco i ruoli
  ROLES = %w[admin client banned]
  default_scope :order => 'user' [...]
需要“摘要/sha2”
类用户user'[…]
我不知道我要修改什么。为什么
如果user.user\u类型管理员
是否不检查当前用户属性?非常感谢您的关注


UP:好的,我阅读了有关cancan需要在应用程序控制器中声明的方法“current_user”。现在我在做。新闻,很快。

你应该这样做。我认为这是更好的方法

将角色种子植入数据库

并在应用程序助手中粘贴此代码

def is_admin?(user)
  admin_role = Role.find(:first, :conditions => ["name = ?", "admin"])
  return user.roles.include?(admin_role)
end
然后在能力上打个电话

            class Ability
             include CanCan::Ability
             def initialize(user)
               user ||= User.new # guest user
                 if is_admin?(user)
                   can :manage, :all
                    # [code code code code commented to find more easily the problem]
                 else
                   can :read, :all
                 end
             end
           end

它会很好的……你应该这样做。我认为这是更好的方法

将角色种子植入数据库

并在应用程序助手中粘贴此代码

def is_admin?(user)
  admin_role = Role.find(:first, :conditions => ["name = ?", "admin"])
  return user.roles.include?(admin_role)
end
然后在能力上打个电话

            class Ability
             include CanCan::Ability
             def initialize(user)
               user ||= User.new # guest user
                 if is_admin?(user)
                   can :manage, :all
                    # [code code code code commented to find more easily the problem]
                 else
                   can :read, :all
                 end
             end
           end

它将很好地工作……

您在哪里定义了用户类型?方法?你在哪里检查授权?什么控制器?(如果是控制器)请也粘贴该代码。这是因为在某种程度上,传递给
CanCan
user
变量是一个值为
“admin”
的字符串-您希望
用户实际上是
用户
实例。已解决!!!如果user.user\u type==“admin”在应用程序控制器中,我将添加def current\u user@current\u user=user到ability.rb中。按用户id查找用户(会话[:用户id])结束谢谢!您在哪里定义了用户类型?方法?你在哪里检查授权?什么控制器?(如果是控制器)请也粘贴该代码。这是因为在某种程度上,传递给
CanCan
user
变量是一个值为
“admin”
的字符串-您希望
用户实际上是
用户
实例。已解决!!!如果user.user\u type==“admin”在应用程序控制器中,我将添加def current\u user@current\u user=user到ability.rb中。按用户id查找用户(会话[:用户id])结束谢谢!