根据原始Array顺序对无序SQL结果进行排序

时间:2014-02-28 11:36:30

标签: ruby-on-rails ruby

我将一组ID发送到控制器params[:ids] = [2,5,9,...]

现在,如果我执行Device.find(params[:ids])之类的查询,结果将根据数据库进行排序。如何根据原始数组对结果进行排序,因此具有id 2的设备首先出现等等?

2 个答案:

答案 0 :(得分:3)

您可以使用Array#index

查找id的索引
ids = params[:ids]
Device.find(ids).sort_by { |device| ids.index(device.id) }

答案 1 :(得分:1)

您只需使用SQL即可:

Device.where(params[:ids]).order("field(id, #{params[:ids].map(:to_i).join(',')})")

这比使用Ruby更快。