如何使用 rolify gem 显示与用户关联的角色名称?

How to display role name associated with user using rolify gem?

我有表 Roles、Users 和 Users_Roles。每个用户都有一个与之关联的角色。如何在视图中显示与用户关联的角色名称。

index.html:

<% @users.each do |user| %>
    <tr>
      <td><%= user.full_name %></td>
      <td><%= user.email %></td>
      <td class="text-center"><%= user.profile_name %></td>
      <td class="text-center"><%= user.client_list %></td></tr><% end %>

user.rb:

def profile_name
  Role.find(role_id).name
end

用户中没有role_id。这是一个 "has and belongs to many" 关联,因此用户可以拥有 0 个、1 个或多个角色,这就是 Rolify 的工作方式。

如果您确定用户只会拥有一个角色,您可以这样做

def profile_name
  roles.first.name
end

如果您不允许任何角色,那么

def profile_name
  roles.first.try(&:name) || 'No role'
end

如果允许多个角色,这可以做到

def profile_name
  roles.map(&:name).join(', ')
end

在模型中添加以下方法以获取用户角色

user.rb

def profile_name
 roles.collect(&:name).join(', ')
end

users_controller.rb

def index
 @users = User.includes(:roles)
end

在视图中,调用角色方法为user.profile_name。