У меня есть таблица часов, в которой я храню информацию о времени пользователя,
таблица состоит из следующих ячеек
project_id
task_id (optional can be null)
worker_id
reported_date
working_hours
каждый работник вводит несколько записей в день, поэтому, как правило, таблица выглядит следующим образом
id project_id worker_id task_id reported_date working hours;
== =========== ========= ========= ============= ==============
1 1 1 1 10/10/2011 4
2 1 1 1 10/10/2011 14
3 1 1 10/10/2011 4
4 1 1 10/10/2011 14
task_id не является обязательным полем, поэтому могут быть случаи, когда пользователь не выбирает его
и их ячейка task_id пуста
Теперь мне нужно отобразить данные с помощью группы по пункту
поэтому результат будет примерно таким:
project_id worker_id task_id working hours
========== ========= ========= ==============
1 1 1 18
1 1 18
Я сделал следующую группу по условию:
@group_hours = Hour.group('project_id,worker_id,task_id)').
select('project_id, task_id ,worker_id,sum(working_hours) as
working_hours_sum')
Мой взгляд выглядит так
<% @group_hours.each do |b| %>
<tr>
<td><%= b.project.name if b.project %></td>
<td><%= b.worker.First_name if b.worker %></td>
<td><%= b.task.name if b.task %></td>
<td class="center"><%= b.working_hours_sum %></td>
<td></td>
</tr>
<% end %>
Это работает , но только если значение task_id не равно нулю , когда идентификатор задачи равен NULL, оно представляет все записи, не группируя их следующим образом
project_id worker_id task_id working hours
=========== ========= ========= ==============
1 1 1 18
1 1 4
1 1 14
Буду признателен за любое решение этой проблемы