Ruby on rails 排序代码时出错,不涉及任何回调
在我的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
@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 versionsort\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日发布的”。