这应该是一个简单的问题,但我似乎无法找到一个好的解决方案。我有一个用户正在选择的id列表,我想保留该foos的订单。
foo_ids = [1899, 7, 1, 2, 3, 42]
foos = Foo.find(foo_ids)
有关如何在选择中保留订单的任何想法,或者返回结果集后的假设?
答案 0 :(得分:1)
我认为使用ActiveRecord无法做到这一点。
但是,我会这样做:
people_ids = [1899, 7, 2, 3, 42]
people = Person.unscoped.find(people_ids)
people_ids.each_with_object(result = []) do |id, result|
result << people.detect { person.id == id }
end
result # => what you are looking for
我使用Person.unscoped,因为在任何情况下,您的默认范围都不是您想要的范围。所以它可能会稍微(非常小)一点点。
使用find(people_ids)只生成一个查询,无论people_ids有多大。 最糟糕的是做这样的事情:
people_ids.each_with_object(result = []) do |id, result|
result << Person.find(id)
end
因为它为每个id生成一个查询。
抱歉没有完美答案; - )