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



在我的rails应用程序中,我正在创建一个这样的数组:

@messages.each do |message|
  @list << {
    :id => message.id,
    :title => message.title,
    :time_ago => message.replies.first.created_at
  }
end

制作完这个数组后,我想按 ASC 顺序time_ago排序,这可能吗?

有什么方法可以更改我之间的顺序,我对此有任何可用的回调。请指教。

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

应该工作

只需执行以下操作:

@list.sort_by {|hash| hash[:time_ago]}

这不会改变原始数组,因此您需要将其分配给某个变量。如果要就地排序,请改用 banged 版本sort_by!

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

相关内容

  • 没有找到相关文章

最新更新