2016-07-07 67 views

回答

0

這將每個ID要做到這一點,最好的方法是使用CASE語句(Postgres的)匹配到產品

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

+0

這樣做的每一個元素查詢ids數組,這是你真的不想要的東西英寸 –

0

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 

這應該讓你在那裏獲得最大的成功。

+0

使用字符串插值構建SQL查詢是對SQL注入攻擊的邀請。使用Rails的內置參數綁定。 –

+0

@Jordan絕對。這使我們成爲了那裏的一部分,並不是一個完整的解決方案。我會更新。 – jstoup111

0

試試這個:

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