我有ids数组ids = [5,2,1,6]
。
我想查找包含这些ID的所有记录,并保持与ids
数组中相同的顺序。
常规records = Product.find(ids)
不保留此顺序(不确定,但可能按ID排序)。
答案 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
那应该可以让你在那里大部分时间。