У меня есть массив идентификаторов, хранящихся в каком-то внешнем хранилище (rails cache или redis). В действии контроллера я выбираю эти данные и выбираю объект, используя его, то есть
ids = [5, 1, 17, 84] # really fetched from external source
result = MyModel.where(:id => ids)
Я также хочу, чтобы он был упорядочен точно так же, как идентификаторы в array_of id:
ids == result.map(&:id) # => true
В качестве обходного пути я использую сортировку по функции mysql FIELD:
MyModel.where(:id => ids).order("FIELD(id, #{ids.join ', '})")
Но мне не нравится этот подход, поскольку он специфичен для mysql и создает очень длинные запросы в случае большого массива ids
.
Есть ли лучший, независимый от DB способ сделать это? Извлечение несортированных данных из БД и сортировка на стороне ruby нежелательны, поскольку они дороги и трудны для использования при разбивке на страницы.
Спасибо.