我有一個ID數組,存儲在一些外部存儲(rails緩存或redis)中。在控制器的動作我使用它,即ActiveRecord order by external array
ids = [5, 1, 17, 84] # really fetched from external source
result = MyModel.where(:id => ids)
獲取這個數據,然後選擇對象我也希望它可以給你開的相同array_of IDS入侵檢測系統:
ids == result.map(&:id) # => true
至於解決方法我用排序MySQL的場函數:
MyModel.where(:id => ids).order("FIELD(id, #{ids.join ', '})")
但因爲它是MySQL的具體和大ids
陣列的情況下產生很長的查詢,我不喜歡這種方式。 有沒有更好的,DB不可知的方式來做到這一點?從數據庫中提取未分類的數據並在紅寶石一側進行排序是不理想的,因爲它資源昂貴且難以用於分頁。
謝謝。
的可能的複製[ActiveRecord.find(陣列\ _of \ _ids),維持秩序(https://開頭計算器。 com/questions/1680627/activerecord-findarray-of-id-preserving-order) – MatayoshiMariano 2017-08-11 19:32:52