Rails: Как узнать время последнего создания сообщения для данного пользователя? - PullRequest
1 голос
/ 09 августа 2011

Пользователь может иметь несколько сообщений:

class User < ActiveRecord::Base
  has_many :messages, :foreign_key => "publisher_id"
end

Чтобы получить последнее сообщение, я делаю:

class User < ActiveRecord::Base
  def last_message_time
    last_message = messages.max{ |m1, m2| m1.created_at <=> m2.created_at }
    last_message ? last_message.created_at : nil
  end
end

Почему-то я уверен, что есть лучший способ сделать это.

Как бы вы это сделали?

Ответы [ 2 ]

6 голосов
/ 09 августа 2011

Это короткая версия:

# Ruby < 2.3.0
def last_message_time
  messages.order(:created_at).last.try(:created_at)
end

# Ruby >= 2.3.0
def last_message_time
  messages.order(:created_at).last&.created_at
end

Обновление (thx @ mnort9): Обновлено для Ruby> 2.3.0

4 голосов
/ 09 августа 2011

По крайней мере, вы можете заставить базу данных выполнить сортировку за вас.

class User < ActiveRecord::Base
  def last_message_time
    last_message = messages.find(:last, :order => :created_at)
    last_message ? last_message.created_at : nil
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...