2009-06-14 5 views
2

Dies ist wahrscheinlich sehr einfach, aber ich habe es schwer herauszufinden.Looping über Spalten in Schienen

Ich habe einen Teil:

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

Aus find_by_sql Ergebnis wie folgt:

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 

Aber ich weiß nicht, wie viele Tage wird es sein, wie kann ich durch die Säule Schleife Ergebnisse für die verschiedenen Tage?

Antwort

8

Dies könnte in einem Helfer mit block/yield getan werden, aber das ist außerhalb des Bereichs Ihrer Frage. Ich komme direkt zu der Frage, indem ich das innerhalb des Partials mache.

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

Update: Hier ist der Helfer Beispiel. Wenn dieses Muster mehr als einmal in Ihrer App angezeigt wird, denke ich, dass dies sowohl wartbar als auch lesbar ist.

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 

Und das ist jetzt Ihr Teil:

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

Mehr Gesamtcodezeilen, aber besser, wenn Sie in Ihrer App tun dies gehen werden.

+0

schön ... ist das etwas, das in einem Helfer sein sollte? nicht in der partiellen? – holden

+0

Wenn Sie dieses Muster an mehreren Stellen verwenden möchten, dann würde ja ich es in einen Helfer extrahieren. Das ist mehr TROCKEN und ein wenig lesbarer. Ich füge den Code in ein paar Minuten hinzu. –

+0

Das ist großartig. Vielen Dank! – holden