2010-12-15 51 views
0

我想根据其角色显示按行分组的所有用户。所以一行的所有管理员用户,一排与所有付费用户,等等。在我看来,我有这样的:基于值的行或列输出

<% @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

您检索从数据库中的所有用户后,可以将其整合到通过的结果通过他们的角色散,然后循环,也许是这样的:

@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 %> 
+0

这项工作很好,谢谢! :-) – John 2010-12-16 08:45:54

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

有没有一种方法可以统计每个循环中用户名的数量?

+0

已经找到它了:user.count – John 2010-12-16 13:21:28