ROR:如何使用.limit方法对数组进行排序

时间:2014-07-07 07:11:53

标签: mysql ruby-on-rails ruby sql-order-by

我想根据创建日期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] }

但我又得到了相同的结果。有人告诉我这是怎样的正确方法。

1 个答案:

答案 0 :(得分:1)

您可以将Array#sort_byArray#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