Assuming you are developing in Rails then the convention would be for
the
models to be Task and Entry, with the controllers tasks_controller and
entries_controller.
If I have understood the problem correctly I think the first thing I
would
do is provide a method in model Task called duration that returns the
total
duration for that task by summing task.entries.time. Then all you need
to
pass to the report view is @tasks containing the tasks you are
interested in
and for each one task.duration is available to be displayed as desired.
If I have understood the problem correctly I think the first thing I
would
do is provide a method in model Task called duration that returns the
total
duration for that task by summing task.entries.time. Then all you need
to
pass to the report view is @tasks containing the tasks you are
interested in
and for each one task.duration is available to be displayed as desired.
Rails also provides aggregate functions so rather than writing a
duration method you could also write:
task = Task.find(:first)
task.entries.sum(:time)
Line 2 generates the following SQL:
SELECT sum(“entries”.time) AS sum_time FROM “entries” WHERE
(“entries”.task_id = 1)
and for each one task.duration is available to be displayed as desired.
Rails also provides aggregate functions so rather than writing a
duration method you could also write:
task = Task.find(:first)
task.entries.sum(:time)
I would still suggest having a duration method, where the method just
returns entries.sum(:time), as it removes the requirement that the
caller
needs to know that how to work out the duration.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.