looping sopra colonne di rotaie
-
13-09-2019 - |
Domanda
Questo è probabilmente molto semplice, ma sto attraversando un periodo difficile capire che fuori.
Ho un parziale:
<% 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 %>
Da un risultato find_by_sql in questo modo:
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
Ma io non so quanti giorni ci saranno, come faccio ad anello attraverso i risultati di colonna per i diversi giorni?
Soluzione
Questo potrebbe essere fatto in un aiutante utilizzando blocco / rendimento, ma questo è al di fuori della portata della tua domanda. Prendo giusta alla domanda in questo modo all'interno del parziale.
<% room.attributes.each do |key, value| %>
<% if key.to_s.include?("day") %>
<td class="<%=current_cycle%>"><%=h value.to_s %></td>
<% end %>
<% end %>
Aggiornamento: Ecco l'esempio di supporto. Se questo modello sta rivelando più di una volta nella vostra applicazione, penso che questo sia più gestibile e leggibile.
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
E questo è ora il tuo parziale:
<% attributes_for(room, "day") do |key, value| %>
<td class="<%=current_cycle%>"><%=h value.to_s %></td>
<% end %>
Più totale linee di codice, ma meglio se avete intenzione di fare questo per tutta la vostra applicazione.