ruby-on-rails - 按另一个 id 数组对 activerecord 结果集进行排序

标签 ruby-on-rails sorting

如何根据另一个 id 数组对这个 activerecord 结果集进行排序?

我对我的 activerecord 模型执行初始查询:

results = Foo.first(5)
results.each do |r| 
  #do some stuff initially with these records. 
  #5 records returned with ids: 1, 2, 3, 4, 5
end 

然后我做一些进一步的处理,结果是另一个 id 数组:

desired_order_ids = [3,1,4,5,2]

我想按 Foo.iddesired_order_ids id 数组指定的顺序对 results 进行排序。这个怎么做?实际上,上面的查询将检索 1000 条记录,所以我正在寻找内存效率最高的方法来执行此操作?

最佳答案

您需要最终结果是 ActiveRecord::Relation 吗?如果您愿意转换为 Array,这应该是最简单的解决方案:

desired_order_ids.map { |id| results[id - 1] }

另一种选择是:

results.sort_by { |result| desired_order_ids.index(result.id) }

关于ruby-on-rails - 按另一个 id 数组对 activerecord 结果集进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33327751/

相关文章:

ruby-on-rails - 模块作用域不对

ruby-on-rails - Gmail SMTP:Net::SMTPAuthenticationError(需要 530-5.5.1 身份验证。了解更多信息,请访问

java - Java中的合并排序实现问题

swift - Swift 为其标准库实现了什么排序算法?

php - 根据另一个表中的关联字符串查询和排序以分号分隔的 id 列表的最有效方法是什么?

ruby-on-rails - rails : Find entries by date

mysql - 将 ruby​​ on rails 应用程序的数据库从 sql server 转换为 mysql

ruby-on-rails - 注册用户时未定义局部变量或方法 `unconfirmed_email'?

c# - VS2010 与 VS2008 中的字符串排序性能下降

algorithm - 我怎样才能找到递归关系?