当您在 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
和 #slice
是 ActiveSupport 中非常方便的补充分别用于数组和散列。
关于ruby-on-rails - ActiveRecord.find(array_of_ids),保留顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1680627/