Rails:如何获取给定用户的上次消息创建时间?

Mis*_*hko 1 ruby-on-rails ruby-on-rails-3 active-record-query

用户可以拥有多条消息:

class User < ActiveRecord::Base
  has_many :messages, :foreign_key => "publisher_id"
end
Run Code Online (Sandbox Code Playgroud)

为了获得最新的消息时间,我做了:

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
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我确信有更好的方法来做到这一点.

你会怎么做?

Mar*_*her 6

这是一个简短的版本:

# 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
Run Code Online (Sandbox Code Playgroud)

更新(thx @ mnort9):已 更新为Ruby> 2.3.0