2013-03-23 10 views
0

Я не уверен, что лучший способ повторить все столбцы в моей модели «День», чтобы воспользоваться упрощенной схемой форматирования.Итерация через столбцы модели

index.html.erb

<% @day.each do |u| %> 
    <li id="date"><%= clean_date(u.date) %></li> 
    <li><b>Morning</b>: <%= u.morning %></li> 
    <% unless u.morning_notes.blank? %><li><b>Morning Notes</b>: <%= u.morning_notes %><% end %></li> 
    <li><b>Afternoon</b>: <%= u.afternoon %></li> 
    <% unless u.afternoon_notes.blank? %><li><b>Afternoon Notes</b>: <%= u.afternoon_notes %><% end %></li> 
    <li><b>Evening</b>: <%= u.evening %></li> 
    <% unless u.evening_notes.blank? %><li><b>Evening Notes</b>: <%= u.evening_notes %><% end %></li> 
    <li><b>Night</b>: <%= u.night %></li> 
    <% unless u.night_notes.blank? %><li><b>Night Notes</b>: <%= u.night_notes %><% end %></li> 
<% end %> 

В идеале, было бы что-то вроде:

<% @day.each do |u| %> 
    <li id="date"><%= clean_date(u.date) %></li> 
    <li><b>TimeOfDay</b>: <%= u.TimeOfDay %></li> 
    <% unless u.TimeOfDay_notes.blank? %> 
     <li><b>TimeOfDay Notes</b>: <%= u.TimeOfDay_notes %> 
    <% end %></li> 
<% end %> 

Где TimeOfDay перебирает утром, днем, вечером и ночью.

+0

ли должны быть датировать H3? Почему бы просто не задать каждому классу имя столбца и стиль с помощью CSS? –

+0

Хорошая точка. Обновлен вопрос. – bwobst

ответ

0

Может быть что-то вроде этого:

<% @day.each do |u| %> 
<li id="date"><%= clean_date(u.date) %></li> 
<% ["morning", "afternoon", "evening", "night"].each do |t| %> 
    <li><b><%= t.capitalize %></b>: <%= u.send(t) %></li> 
    <% notes = u.send("#{t}_notes") %> 
    <% unless notes.blank? %> 
     <li><b><%= t.capitalize %> Notes</b>: <%= notes %></li> 
    <% end %> 
<% end %> 
+0

Я должен добавить, что я, вероятно, переместил бы это на модель или контроллер, поэтому у представления есть хороший аккуратно упакованный объект или хеш. – atw13

+0

Yup! Это отлично работает. Просто удалите «u» из строки «если». Каков наилучший способ передать это модели? – bwobst

+0

Трудно сказать, потому что я действительно не понимаю, что такое u.morning. Самое сложное решение, которое я могу придумать, - это определить отдельный класс внутри вашего класса Day, скажем, 'class TimeData; attr_accessor: time,: notes; end', и иметь метод экземпляра в Day, который возвращает хэш этих вещей, индексированный по: утром,: днем ​​и т. д. Тогда цикл выше будет идти в этом методе. Но если вам это не нужно в другом месте, тогда у меня, вероятно, будет такой метод, как 'def time_notes; {morning => morning_notes,: днем ​​=> днем_notes, ...} 'и используйте петлю each_pair в вашем представлении. – atw13

Смежные вопросы