这是我的问题:
我正在使用cancan gem。我认为一切都很好,除了一件事,产生undefined method 'user_type?' for "admin":String
。
这是我的能力.rb
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
我的user.rb
require 'digest/sha2'
class User < ActiveRecord::Base
#definisco i ruoli
ROLES = %w[admin client banned]
default_scope :order => 'user' [...]
我无法弄清楚我要修改的内容。为什么if user.user_type? :admin
不检查当前用户属性?非常感谢您的关注!
UP:好的,我读过应用程序控制器中声明的cancan need方法“current_user”。现在我努力了。新闻,很快。
答案 0 :(得分:1)
你应该这样做。我认为这是更好的方法。
将角色种子放入DB。
在应用程序助手中粘贴此代码。
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
它会正常工作.......