2010-09-22 4 views
2

Je suis à la recherche d'une fonction que nous pouvons utiliser dans une boucle pour le faire:Trick Loop - Comment afficher un attribut si ...?

<% for rink in @rinks_in_region %> 
    <%= rink.city #Show Only if city (n-1) != n %> 
    <%= link_to_rink(rink.name+" Ice Rink",rink) %> 
    <br> 
<% end -%> 

Fondamentalement juste montrer la ville que si elle est différente de la précédente.

Avez-vous du sens? Merci de votre aide!

Alextoul

Répondre

5

Vous pouvez utiliser la méthode group_by sur @rinks_in_region à arénas du groupe par la ville, puis utiliser ces groupes pour afficher les villes et les arénas. Il renvoie un hachage mappant la chose que vous regroupez, en l'occurrence la ville, avec les valeurs de la collection d'origine qui sont dans ce groupe. Alors:

<% @rinks_in_region.group_by(&:city).each_pair do |city, rinks| %> 
    <%= city %> 
    <% rinks.each do |rink| %> 
    <%= link_to_rink(rink.name+" Ice Rink",rink) %> 
    <br/> 
    <% end -%> 
<% end -%> 
+1

Vous pouvez également utiliser '.group_by (&: ville)' puisque vous êtes juste retournerez un seul méthode/propriété de @rings_in_region. –

+0

Très bon point. Actualisé. – Shadwell

+0

Première fois que j'entends parler de cette méthode group_by. Des trucs géniaux. +1 – Faisal

0
<% prev_city = nil -%> 
<% for rink in @rinks_in_region %> 
    <%= rink.city if rink.city != prev_city %> 
    <% prev_city = rink.city -%> 
    <%= link_to_rink(rink.name+" Ice Rink",rink) %> 
    <br> 
<% end -%> 
0

Pas une réponse ruby, mais introduire une nouvelle variable, appeler « température » ou quelque chose et que mettre à l'élément courant dans votre foreach. De cette façon, au début de votre boucle, vous avez accès à l'élément last Loops.

temp = '' 
    <% for rink in @rinks_in_region %> 
     <%= rink.city #Show Only if city != temp %> 
     <%= link_to_rink(rink.name+" Ice Rink",rink) %> 
     <br> 

temp = city 

    <% end -%> 

temp = '' 
+0

Désolé pour le code pseudo, pas un programmeur rubis;) –

+0

je vois ce que tu veux dire, thks beaucoup – Alextoul