Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql ROR:如何使用.limit方法对数组排序_Mysql_Ruby On Rails_Ruby_Sql Order By - Fatal编程技术网

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

Mysql ROR:如何使用.limit方法对数组排序,mysql,ruby-on-rails,ruby,sql-order-by,Mysql,Ruby On Rails,Ruby,Sql Order By,我想根据创建日期描述显示记录。但我必须根据创建日期描述为每个用户仅选择一条记录。为此,我使用.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|

我想根据创建日期描述显示记录。但我必须根据创建日期描述为每个用户仅选择一条记录。为此,我使用.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] }
但是我还是得到了同样的结果。有人能告诉我正确的方法是什么吗。

你可以将Arraysort\u by与Arrayreverse一起使用。如果在不同的位置填充数组,请确保具有相同的对象类型

@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

limit1不会返回单个元素吗?是的,它将返回单个结果,但在将值添加到数组后,我可以按date DESC对它们进行排序吗?响应[:date]包含字符串而不是date,使用此响应[:date]=message.created_at,然后重试排序。它工作得非常好,非常感谢@Pavel Evstigneev