我想根据创建日期DESC显示记录。但是我必须根据创建的日期DESC为每个用户选择一条记录。为此我使用.limit方法只从数据库和.order方法获取一条记录来对数组进行排序:
@messages = Message.where('FromUserId = ? or ToUserId = ?', user.id, user.id).order('created_at DESC').limit(1)
array = Array.new
@messages.each do |message|
response = Hash.new
response[:id]=message.id
response[:from]=message.FromUserId
response[:to]=message.ToUserId
response[:date]=message.created_at.strftime("%d/%m/%y %I:%M %p")
response[:content]=message.MessageContent
array.push(response)
end
但是当我循环播放数组时它显示在顶部的旧记录我也尝试使用这个:
@messges = array.sort { |a,b| a[:date] <=> b[:date] }
但我又得到了相同的结果。有人告诉我这是怎样的正确方法。
答案 0 :(得分:1)
您可以将Array#sort_by
与Array#reverse
一起使用。如果你填充&#34; array&#34;在不同的地方,然后确保你有相同的对象类型
@messges.sort_by! {|m| m[:date].to_s } # sorted oldest to newest
@messges.sort_by! {|m| m[:date].to_s }.reverse # sorted newest to oldest