我有用户表(由设计创建),我添加了一个角色列,可以是:管理员、经理和代理。在 user.rb 我放了一个像这样的枚举:
class User < ApplicationRecord
enum role: { admin: 0, manager: 1, agent: 2 }
end
我正在使用 cancancan 并想做两件事:
1 - 如何根据注册用户的角色显示菜单或不同的按钮?在视图中,我是这样说的:
<% if current.present? && current_user.admin? %>
<%= link_to 'Purchases (Admin access)', admin_purchases_path, class: 'nav-link mr-5 ' %>
<% end %>
2 - 如何根据用户的角色显示特定页面?在我的 User.rb 我把这个:
def admin?
self.role == 'admin'
end
我在ability.rb上尝试它:
user ||= User.new # guest user (not logged in)
if admin?
can :manage, :all
else
can :read, :all
end
在控制器上,我放了:
load_and_authorize_resource
但我收到一个错误:
NoMethodError in Home#index
undefined method `admin?' for nil:NilClass
<% if current_user.admin? %> <<< On this line here