1
这应该是一个简单的问题,但我似乎无法找到一个好的解决方案。我有一个用户正在选择的id列表,我想保留foos的顺序。按选择顺序排序
foo_ids = [1899, 7, 1, 2, 3, 42]
foos = Foo.find(foo_ids)
关于如何保留select或select返回结果集之后的命令的任何想法?
这应该是一个简单的问题,但我似乎无法找到一个好的解决方案。我有一个用户正在选择的id列表,我想保留foos的顺序。按选择顺序排序
foo_ids = [1899, 7, 1, 2, 3, 42]
foos = Foo.find(foo_ids)
关于如何保留select或select返回结果集之后的命令的任何想法?
我不认为有办法做到这一点与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因为在任何情况下,您的默认范围是不是你想要的。所以它可能会稍微快一点。
无论people_ids有多大,使用find(people_ids)只会产生一个查询。 最糟糕的是做这样的事情:
people_ids.each_with_object(result = []) do |id, result|
result << Person.find(id)
end
,因为它产生的每一个ID查询。
对不起,没有完美的答案;-)
感谢您的回应德尔巴,我肯定会给那个w旋转,感谢您的输入! –
谢谢,这大致是解决方案。我调整了一下,但我相信这样做也可以。 –