Как я могу получить сумму общего времени в каждой презентации? - PullRequest
1 голос
/ 04 апреля 2020

Цель состоит в том, чтобы подсчитать, сколько презентаций используется, плюс общее количество времени для всех презентаций. В настоящее время у меня есть общее количество, которое составляет <%= sale.lead.presentations.count %>.

. Я пытаюсь выяснить, как я могу сложить общую сумму этой переменной: (<%= distance_of_time_in_words(presentation.started_at, presentation.ended_at, include_seconds: true, scope: "datetime_abbr.distance_in_words") %>)

Ниже как я сейчас отформатировал это:

<% sale.lead.presentations.each do |presentation| %>

            <div>
              <strong><%= presentation.name %></strong></br>
              <%= presentation.started_at.in_time_zone.to_s(:nice_time) %> -
              <%= presentation.ended_at.in_time_zone.to_s(:nice_time) %></br>
              (<%= distance_of_time_in_words(presentation.started_at, presentation.ended_at, include_seconds: true, scope: "datetime_abbr.distance_in_words") %>)
            </div>

          <% end %>

Это мой текущий вывод:

SL 2700 Window Sales Manual 8.19 v7
10: 59p - 11: 06p
(6 минут и 41 сек c) - <--- Я хочу получить общую сумму для всех презентаций </p>

1 Ответ

0 голосов
/ 04 апреля 2020

Я думаю, что лучший способ сделать это - поместить метод в ваш контроллер, где подготовлено это представление. Код может быть как

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...