Я полагаю, что вы можете получить это, конвертируя время в целые числа и вычисляя среднее.Грубо говоря:
times = [2.days.ago, 3.days.ago, 4.days.ago]
average_ticket_time = Time.at(times.map(&:to_i).sum / times.count) # convert to ints and get average
time_ago = Time.now - average_ticket_time # time ago from now
readable_time_ago = (time_ago / 60 / 60).round # divide by 60 secs then 60 mins; round to get closest hour
# => 72 (hours ago)
Или в одной строке:
((Time.now - (Time.at(times.map(&:to_i).sum / times.count))) / 60 / 60).round
Итак, в среднем 72 часа назад.
Вы также можете разделить на дополнительные 24
чтобы получить время в днях: в этом случае 3 дня, что вы и ожидаете в этом простом примере.
В вашем примере ваш массив times
будет выглядеть следующим образом:
times = Ticket.opened.map { |ticket| ticket.created_at.to_i }
# or perhaps the following, check the performace:
times = Ticket.opened.pluck(:created_at).map(&:to_i)
Надеюсь, это поможет - дайте мне знать, как вы поживаете.