Mysql ROR:如何使用.limit方法对数组排序
我想根据创建日期描述显示记录。但我必须根据创建日期描述为每个用户仅选择一条记录。为此,我使用.limit方法从数据库中仅获取一条记录,并使用.order方法对数组进行如下排序: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|
@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