Я делаю расписание, но у меня есть проблемы.Я хочу, чтобы это выглядело так:
projects |Monday Tuesday Wednesday Thursday Friday Saturday Sunday
development| 3:50 4:00 5:00 3:00 0:00 0:00 0:00
Testing | 0:00 0:00 0:00 2:00 4:00 0:00 0:00
Lanch | 0:00 0:00 0:00 0:00 1:00 6:00 0:00
В каждом проекте has_many регистрируется с часами в виде поля.
Я выполнил этот запрос:
@log_week_project = current_user.logs.where(:log_date => (Time.now.beginning_of_week + 1.second)..(Time.now.end_of_week - 1.second)).group("project_id").group("date(log_date)").sum(:hours)
И получил это:
<OrderedHash {[2, "2011-05-24"]=>31800.0, [1, "2011-05-24"]=>10200.0, [1, "2011-05-23"]=>25200.0, [1, "2011-05-26"]=>19800.0}>
Ключ в хэше - это массив с project_id @ [0] и log_date @ [1].Значение - это часы.
Я делаю это, на мой взгляд:
<% for project in @projects do %>
<%= project.name %>
<% @log_week_project.map do |key,hours|%>
<% if key[0] == project.id %>
<%= time_diff(hours)%>
<% end %>
<% end %>
<% end %>
Это дает мне часы проекта на каждую дату, но если есть дата без часов, то нетвыводится, и таблица становится неправильной.
Если в среду нет часов, то в четверг в столбце среды заканчиваются часы четверга.
Какие-либо советы о том, как это сделать?Возможно, есть лучший способ?
РЕШЕНИЕ:
Спасибо за ответы и комментарии.Решение было следующим:
<% for project in @projects do %>
<%= project.name %>
<% @dates.each do |date| %>
<% hours = @log_week_project.detect { |key| key[0][0].to_i == project.id && key[0][1].to_time.strftime('%a') == date.to_time.strftime('%a')}%>
<%= hours ? time_diff(hours[1]) : "0:00"%>
<% end %>
<% end%>
Где @dates - это массив дат в диапазоне времени.Теперь рефакторинг ...;)