группировка и отображение по датам - PullRequest
0 голосов
/ 28 декабря 2010

У меня есть приложение rails, и я хочу отображать сообщения (сообщения) для пользователя в зависимости от времени поступления сообщений

каждое сообщение (Сообщение) имеет свойство с именем creation_at

например - 20 минут назад ----- message1 ----- message2

- 1 час назад ----- message3 ----- message4 ----- message5

- 2 дня назад ----- message6

и т. Д. И т. П.

как я могу сделать это с помощью рельсов?

Я использую рельсы 3 б.л.

Ответы [ 3 ]

1 голос
/ 28 декабря 2010

У вас есть два варианта.Во-первых, используйте встроенный помощник 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 намассив сообщений.

0 голосов
/ 28 декабря 2010

Я нашел ответ на RailsCasts, который идеально подходит для моих нужд

http://railscasts.com/episodes/29-group-by-month

0 голосов
/ 28 декабря 2010

Вы можете установить область по умолчанию в вашей модели сообщения:

default_scope order('messages.created_at DESC')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...