循环在rails中的列

时间:2009-06-14 21:27:35

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

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

我有一个部分:

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

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

1 个答案:

答案 0 :(得分:8)

这可以使用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 %>

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