使用ids查找记录并保持与ids数组中相同的顺序

时间:2016-07-07 12:54:01

标签: ruby-on-rails ruby ruby-on-rails-4

我有ids数组ids = [5,2,1,6]

我想查找包含这些ID的所有记录,并保持与ids数组中相同的顺序。

常规records = Product.find(ids)不保留此顺序(不确定,但可能按ID排序)。

3 个答案:

答案 0 :(得分:4)

试试这个:

ids = [5,2,1,6]
records = Product.find(ids).index_by(&:id).values_at(*ids)

答案 1 :(得分:0)

这会将每个ID与产品匹配

ids.map{ |id| Product.find(id) }

答案 2 :(得分:0)

执行此操作的最佳方法是使用CASE语句(Postgres)。

def order_by_id(ids)
  order_by = ["case"]
    ids.each_with_index.map do |id, index|
    order_by << "WHEN id=#{ActiveRecord::Base.connection.quote id} THEN #{index}"
  end
  order_by << "end"
  order(order_by.join(" "))
end

那应该可以让你在那里大部分时间。