Выполните сортировку на стороне клиента следующим образом:
ids = item_list.split(',')
items = Inventory.find(ids).sort_by { |i| ids.index(i.id) }
При этом используется только один запрос, а sort_by
вычисляет блок только один раз для каждого элемента, поэтому часть не должнаэто будет так дорого.Если вам нужно иметь дело с множеством элементов, вы можете легко создать Hash, который отображает идентификатор на его индекс и использовать его в блоке sort_by
.
Основная идея состоит в сортировке одного массива с использованиемструктура другого, например:
>> a = [ 23, 11, 42, 5 ]
>> b = [5, 23, 11, 42]
>> b.sort_by { |i| a.index(i) }
=> [23, 11, 42, 5]