У вас есть два варианта.Во-первых, используйте встроенный помощник Rails time_ago_in_words
:
# in your views
<%= time_ago_in_words(message.created_at) %>
Подробнее об этом помощнике вы можете прочитать в документации Rails .
Недостаткиэто то, что он работает только в представлениях, и это может быть не совсем правильный формат.Если это так, вы всегда можете определить свой собственный помощник в инициализаторе.Вот метод, который я написал для старого приложения, который вы должны изменить в соответствии со своими требованиями:
class ActiveSupport::TimeWithZone
def how_long_ago
seconds = (Time.now - self)
# Keep adding days, weeks, months, years if necessary--same principle should apply
if seconds > 3600
(seconds / 3600).to_i.to_s + "h " + (seconds % 3600 / 60).to_i.to_s + "m"
elsif seconds > 60
(seconds / 60).to_i.to_s + "m " + (seconds % 60).to_i.to_s + "s"
else
seconds.to_i.to_s + "s"
end
end
end
Message.first.created_at.how_long_ago # => 3m 52s
Чтобы сгруппировать данные, основанные на этом, вы можете использовать метод group_by
намассив сообщений.