ruby-on-rails - ActiveRecord.find(array_of_ids),保留顺序

标签 ruby-on-rails ruby activerecord

当您在 Rails 中执行 Something.find(array_of_ids) 时,结果数组的顺序不取决于 array_of_ids 的顺序。

有什么办法可以找到并保留顺序吗?

ATM 我根据 ID 的顺序手动对记录进行排序,但这有点蹩脚。

UPD:如果可以使用 :order 参数和某种 SQL 子句指定顺序,那么如何?

最佳答案

奇怪的是,没有人提出这样的建议:

index = Something.find(array_of_ids).group_by(&:id)
array_of_ids.map { |i| index[i].first }

除了让 SQL 后端执行它之外,尽可能高效。

编辑:要改进我自己的答案,您也可以这样做:

Something.find(array_of_ids).index_by(&:id).slice(*array_of_ids).values

#index_by#sliceActiveSupport 中非常方便的补充分别用于数组和散列。

关于ruby-on-rails - ActiveRecord.find(array_of_ids),保留顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1680627/

相关文章:

ruby - 重写 Ruby 注入(inject)

ruby-on-rails - 搜索 has_and_belongs_to_many :tags 的模型

mysql - Rails 选择子查询(没有 finder_sql,如果可能)

java - 具有乐观锁定的 Active Record 模式 - 更新前读取与在应用程序中存储版本?

ruby-on-rails - Rails 和 mongo 嵌入关系

ruby-on-rails - 无法使用 Rails 中的数据关闭按钮关闭 Twitter Bootstrap Alert

ruby - 将命名配置文件样本树合并为自上而下的总和

ruby-on-rails - 我想使用 EtherPad(或克隆)。我的网站正在运行 Ruby on Rails。 API 还是本地安装?

ruby-on-rails - "[Class_Name] must exist"rails 5 rspec 测试协会

ruby - 遍历数组并删除某些字符串元素