зацикливание на колоннах в рельсах

Это, наверное, очень просто, но мне трудно понять это.

У меня есть частичное:

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

Но я не знаю, сколько дней будет, как я могу просмотреть результаты столбца за разные дни?


person holden    schedule 14.06.2009    source источник


Ответы (1)


Это можно сделать в помощнике, используя block/yield, но это выходит за рамки вашего вопроса. Я перейду к вопросу, сделав это внутри файла partial.

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

Больше строк кода, но лучше, если вы собираетесь делать это во всем приложении.

person Walt Jones    schedule 14.06.2009
comment
красиво... это то, что должно быть в хелпере? не в частичном? - person holden; 15.06.2009
comment
Если вы собираетесь использовать этот шаблон в нескольких местах, то да, я бы извлек его в помощник. Это более DRY и немного более читабельно. Я добавлю код через несколько минут. - person Walt Jones; 15.06.2009