#<User:0x007fccda8003c8> 的未定义方法 'admin?'
undefined method 'admin?' for #<User:0x007fccda8003c8>
我正在使用 gem 'devise'
和 'cancancan'
为每个用户定义许多角色。问题是当我 运行 rails 服务器说 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
有什么想法吗??
请添加方法管理员?到 user.rb
def admin?
self.roles.include?(:admin)
end
或尝试从 ability.rb 文件调用 has_role?(:admin)。
您的 User
模型没有 admin?
方法。相反,它提供了一个 has_role?
方法。所以而不是 user.admin?
写在你的 ability.rb
:
user.has_role?(:admin)
另一种选择是向您的 User
模型添加 admin?
方法:
def admin?
has_role?(:admin)
end
我正在使用 gem 'devise'
和 'cancancan'
为每个用户定义许多角色。问题是当我 运行 rails 服务器说 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
有什么想法吗??
请添加方法管理员?到 user.rb
def admin?
self.roles.include?(:admin)
end
或尝试从 ability.rb 文件调用 has_role?(:admin)。
您的 User
模型没有 admin?
方法。相反,它提供了一个 has_role?
方法。所以而不是 user.admin?
写在你的 ability.rb
:
user.has_role?(:admin)
另一种选择是向您的 User
模型添加 admin?
方法:
def admin?
has_role?(:admin)
end