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

时间:2018-12-28 09:39:46

标签: ruby-on-rails devise rolify

我有角色,用户和用户_角色表。每个用户将具有与之关联的角色。如何在视图中显示与用户关联的角色名称。

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

2 个答案:

答案 0 :(得分:2)

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

user.rb

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

users_controller.rb

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

在视图中,将角色方法称为user.profile_name。

答案 1 :(得分:1)

用户中没有role_id。这是一个“拥有并属于许多人”的关联,因此用户可以拥有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