【问题标题】:looping over columns in rails环绕导轨中的柱子
【发布时间】:2009-06-14 21:27:34
【问题描述】:

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

我有一部分:

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

从 find_by_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

但我不知道会有多少天,如何循环遍历不同天的列结果?

【问题讨论】:

    标签: sql ruby-on-rails ruby loops partial


    【解决方案1】:

    这可以在使用块/产量的助手中完成,但这超出了您的问题范围。我将通过在部分内部执行此操作来解决问题。

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

    代码总行数更多,但如果您要在整个应用程序中执行此操作会更好。

    【讨论】:

    • 漂亮...这是应该在助手中的东西吗?不在局部?
    • 如果您打算在多个地方使用此模式,那么是的,我会将其提取到帮助程序中。这更干燥,更具可读性。我会在几分钟内添加代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2011-09-30
    • 2017-04-04
    • 1970-01-01
    • 2011-12-16
    • 2016-07-07
    相关资源
    最近更新 更多