ActiveRecord find_all_by_X 是否保留顺序?如果不是,应该用什么来代替?

2024-03-21

假设我有一个非空数组ids of Thing对象 ID,我想使用查找相应的对象things = Thing.find_all_by_id(ids)。我的印象是things不一定有类似于的顺序ids.

  1. 我的印象正确吗?

  2. 如果是这样,我可以用什么来代替find_all_by_id保留顺序并且不会不必要地多次访问数据库?


  1. Yes
  2. Use 数组#排序 http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-sort

一探究竟:

Thing.where(:id => ids).sort! {|a, b| ids.index(a.id) <=> ids.index(b.id)}

where(:id => ids)将使用生成一个查询IN()。然后排序!方法将迭代查询结果并比较 ids 数组中 id 的位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ActiveRecord find_all_by_X 是否保留顺序?如果不是,应该用什么来代替? 的相关文章

随机推荐