2009-06-14 7 views
2

C'est probablement très facile, mais j'ai du mal à le comprendre.boucle sur les colonnes dans les rails

J'ai une partie:

<% for room in @scrape %> 
<tr id="page_<%= room.id %>"> 
    <th scope="row" class="<%= cycle("spec", "specalt") -%>"><%=h room.name %></td> 
    <td class="<%=current_cycle%>"><%=h room.day1 %></td> 
    <td class="<%=current_cycle%>"><%=h room.day2 %></td> 
    <td class="<%=current_cycle%>"><%=h room.day3 %></td> 
    <td class="<%=current_cycle%>"><%=h room.day4 %></td> 
    <td class="<%=current_cycle%>"><%=h room.day5 %></td> 
    <td class="<%=current_cycle%>"><%=h room.day6 %></td> 
    <td class="<%=current_cycle%>"><%=h room.day7 %></td> 
    <td class="<%=current_cycle%>"><%= select_tag("room[#{room.id}]", options_for_select(0..room.spots,0)) %></td> 

</tr> 
<% end %> 

d'un résultat find_by_sql comme ceci:

ID   Room  Day1  Day2 Day3 Day4 Day5 Day6 Day7 
    18298 Blue Room 13.23 13.23 13.23 13.23 13.23 13.23 13.23 

Mais je ne sais pas combien de jours il y aura, comment puis-je boucle à travers la colonne résultats pour les différents jours?

Répondre

8

Cela pourrait être fait dans une aide en utilisant bloc/rendement, mais cela sort du cadre de votre question. Je vais aller droit à la question en faisant cela à l'intérieur du partiel.

<% room.attributes.each do |key, value| %> 
    <% if key.to_s.include?("day") %> 
    <td class="<%=current_cycle%>"><%=h value.to_s %></td> 
    <% end %> 
<% end %> 

Mise à jour: Voici l'exemple d'aide. Si ce modèle s'affiche plusieurs fois dans votre application, je pense que cela est à la fois plus facile à lire et à maintenir.

def attributes_for(model, match, &block) 
    model.attributes.each do |key, value| 
    if key.to_s.include?(match) 
     # we pass key and value in this example. but you can 
     # pass whatever you want to the block. 
     concat(capture(key, value, &block)) 
    end 
    end 
end 

Et voici maintenant votre partie:

<% attributes_for(room, "day") do |key, value| %> 
    <td class="<%=current_cycle%>"><%=h value.to_s %></td> 
<% end %> 

Plus total des lignes de code, mais mieux si vous allez faire cela tout au long de votre application.

+0

belle ... est-ce quelque chose qui devrait être dans une aide? pas dans le partiel? – holden

+0

Si vous allez utiliser ce modèle à plusieurs endroits, alors oui je l'extrairais dans un assistant. C'est plus sec et un peu plus lisible. Je vais ajouter le code dans quelques minutes. –

+0

C'est génial. Je vous remercie! – holden