我将一组ID发送到控制器params[:ids] = [2,5,9,...]
现在,如果我执行Device.find(params[:ids])
之类的查询,结果将根据数据库进行排序。如何根据原始数组对结果进行排序,因此具有id 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更快。