【发布时间】:2015-07-12 19:05:16
【问题描述】:
我使用gem 'devise' 和'cancancan' 为每个用户定义多个角色。问题是当我运行 rails server 时它说undefined method admin?
在 application_controller.rb 文件中:
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:roles) }
end
在 user.rb 文件中:
ROLES = %i[admin author]
def roles=(roles)
roles = [*roles].map { |r| r.to_sym }
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.inject(0, :+)
end
def roles
ROLES.reject do |r|
((roles_mask.to_i || 0) & 2**ROLES.index(r)).zero?
end
end
def has_role?(role)
roles.include?(role)
end
在ability.rb 文件中:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
有什么想法吗??
【问题讨论】:
-
我猜你的
users表没有admin列。请检查您的迁移是否有任何待处理或相应添加。 -
无关,但
roles = [*roles].map(&:to_sym)
标签: ruby-on-rails ruby ruby-on-rails-4 devise cancancan