Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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
Ruby on rails 排序代码时出错,不涉及任何回调_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 排序代码时出错,不涉及任何回调

Ruby on rails 排序代码时出错,不涉及任何回调,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在我的rails应用程序中,我创建了如下数组: @messages.each do |message| @list << { :id => message.id, :title => message.title, :time_ago => message.replies.first.created_at } end @messages.each do| messages| @列出message.id, :title=>message

在我的rails应用程序中,我创建了如下数组:

@messages.each do |message|
  @list << {
    :id => message.id,
    :title => message.title,
    :time_ago => message.replies.first.created_at
  }
end
@messages.each do| messages|
@列出message.id,
:title=>message.title,
:time\u ago=>message.replays.first.created\u at
}
结束
制作完这个数组后,我想按时间顺序对它进行排序,这可能吗

有没有什么方法可以改变我的顺序,我指的是有任何回调可用于此。请建议。

只要做:

@list.sort_by {|hash| hash[:time_ago]}
这不会改变原始数组,因此需要将其分配给某个变量。如果您想在适当的位置对其进行排序,请使用banged version
sort\u by取而代之

请注意:代码中存在潜在的N+1问题,因为循环可能会在每次重复时执行额外的SQL查询。所以记得在循环之前调用
@messages.includes(:repress)
。此外,使用适当的SQL查询可能会有更快的解决方案。但是,您需要指定为什么希望time_age作为数据库中消息的第一个值—是否希望使用最早的消息?

final_array=@list.sort{a,b | a[:time_ago]b[:time_ago]}
final_array = @list.sort {|a,b| a[:time_ago] <=> b[:time_ago]}

应该可以

time\u ago
的设置复制到datetime值对我来说似乎是错误的。就像说“这是2014年2月21日发布的”。