用户可以拥有多条消息:
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
出于某种原因,我确信有更好的方法可以做到这一点。
你会怎么做?
答案 0 :(得分: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
更新(thx @ mnort9): 已更新为Ruby&gt; 2.3.0
答案 1 :(得分:4)
至少,您可以让数据库为您进行排序。
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