代码之家  ›  专栏  ›  技术社区  ›  holden

在铁轨的柱子上循环

  •  2
  • holden  · 技术社区  · 16 年前

    这可能很容易,但我很难弄清楚。

    我有一部分:

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

    从“按SQL查找”结果中,如下所示:

        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
    

    但我不知道会有多少天,如何循环查看不同日期的列结果?

    1 回复  |  直到 16 年前
        1
  •  8
  •   Walt Jones    16 年前

    这可以在使用block/yield的助手中完成,但这超出了您的问题范围。我将通过在部分中这样做来回答这个问题。

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

    更新: 下面是助手示例。如果这个模式在你的应用程序中出现不止一次,我认为这是更易于维护和可读的。

    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 
    

    现在这是你的部分:

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

    代码的总行数越多,但如果你打算在整个应用程序中这样做,效果会更好。