我有ID數組ids = [5,2,1,6]
。用ID查找記錄並保持與ID數組相同的順序
我想查找所有帶有這些ID的記錄,並保持與ids
陣列中的順序相同。
Regular records = Product.find(ids)
不保留此順序(不確定,但可能它按ID排序)。
我有ID數組ids = [5,2,1,6]
。用ID查找記錄並保持與ID數組相同的順序
我想查找所有帶有這些ID的記錄,並保持與ids
陣列中的順序相同。
Regular records = Product.find(ids)
不保留此順序(不確定,但可能它按ID排序)。
這將每個ID要做到這一點,最好的方法是使用CASE語句(Postgres的)匹配到產品
ids.map{ |id| Product.find(id) }
。
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
這應該讓你在那裏獲得最大的成功。
使用字符串插值構建SQL查詢是對SQL注入攻擊的邀請。使用Rails的內置參數綁定。 –
@Jordan絕對。這使我們成爲了那裏的一部分,並不是一個完整的解決方案。我會更新。 – jstoup111
試試這個:
ids = [5,2,1,6]
records = Product.find(ids).index_by(&:id).values_at(*ids)
這樣做的每一個元素查詢ids數組,這是你真的不想要的東西英寸 –