Я думаю, что лучший способ сделать это - поместить метод в ваш контроллер, где подготовлено это представление. Код может быть как
def (where_your_view_is_prepared)
...
@total_presentation_time = 0
sale.lead.presentations.each do |presentation|
@total_presentation_time += (presentation.ended_at - presentation.started_at)
# => This will give something like this 128184857/28800000000
end
@total_presentation_time = (@total_presentation_time * 24 * 60 * 60).round
# => This will give you the total seconds of presentation
# => You can also use this Time.at(285).utc.strftime('%H:%M:%S') will give result "00:04:45"
...
end
или, если вы хотите нормализовать объект времени для каждой презентации, вы можете сделать это следующим образом:
def (where_your_view_is_prepared)
...
@total_presentation_time = 0
sale.lead.presentations.each do |presentation|
@total_presentation_time += ((presentation.ended_at - presentation.started_at) * 24 * 60 * 60).round
# => This will give something like this 285
end
# => Can be directly use in both controller or in view
...
end
После того, как вы получите total_seconds из первого метода или Второй способ, вы также можете отформатировать его самостоятельно следующим образом.
def format_presentation_duration
hours = @total_presentation_time / (60 * 60)
minutes = (@total_presentation_time / 60) % 60
seconds = @total_presentation_time % 60
"#{ hours } hours #{ minutes } minutes and #{ seconds } seconds"
end