基于值在行或列中输出

时间:2010-12-15 12:38:00

标签: ruby-on-rails

我想根据他们的角色显示按行分组的所有用户。所以一行包含所有管理员用户,一行包含所有高级用户等。在我看来,我有这个:

   <% @users.each do |user| %>
    <tr>
      <td><%=h user.name %></td>
      <td><%=h user.role %></td>
    </tr>
   <% end %>

在控制器中我有这个:

@users = User.find(:all, :order=>'role asc')

这将很好地输出所有用户,但每个用户都在一个单独的行上。有任何想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

从数据库中检索所有用户后,您可以按角色将它们分组为哈希,然后循环遍历该结果,可能是这样的:

@users = User.all(:order => "role ASC").group_by(&:role)

这将导致哈希:

=> {"admin" => [<User...>, <User...>, ...], "premium" => [<User...>]}

因此,在您的视图中,您可以使用each_pair方法遍历它们:

<% @users.each_pair do |role, users| %>
  <tr>
    <td><%= role %><td>
    <td>
    <% users.each do |user| %>
      <span><%= user.name %></span>
    <% end %>
    </td>
  </tr>
<% end %>

答案 1 :(得分:0)

 <% users.each do |user| %>
  <span><%= user.name %></span>
<% end %>

有没有办法计算每个循环中的用户名数?