2010-12-15 8 views
0

Je souhaite afficher tous mes utilisateurs groupés en rangées en fonction de leur rôle. Donc, une ligne avec tous les utilisateurs admin, une ligne avec tous les utilisateurs premium, etc. À mon avis, j'ai ceci:Sortie en ligne ou en colonne basée sur la valeur

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

Et dans le contrôleur, j'ai ceci:

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

Ce sera bien sortie tous les utilisateurs, mais tous les utilisateurs sur une ligne distincte. Des idées? Merci!

Répondre

2

Après avoir récupéré tous les utilisateurs du db, vous pouvez les regrouper dans un hachage par leur rôle et boucle à travers ce résultat, peut-être comme ceci:

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

Cela se traduira par un hachage:

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

donc dans vos vues que vous boucle à travers eux pourrait avec la méthode 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

Cela fonctionne très bien, merci! :-) – John

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

Existe-t-il un moyen de comptabiliser le nombre de noms d'utilisateur dans cette boucle?

+0

Déjà trouvé: user.count – John

Questions connexes