Не знаю слишком много о Rails (или Ruby, или программировании), но я посмотрел документацию Ruby по Array и методы insert () и delete_at () дали мне представление.
Создайте столбец последовательности в таблице элементов (начиная с 0), а затем создайте массив объектов элементов (или даже просто item_id в бэкэнде).
0 1 2
array = A B C
user wants B A C
array.insert(0, array.delete_at(1))
0 1 2
array = B A C
Если они могут внести много изменений одновременно, то это, очевидно, сместит индексы после каждой вставки. Это означает, что вы должны просто удалить по item_id.
array.insert(0, array.delete(item.id))
Метод delete возвращает значение того, что было удалено. Делая последовательность синонимичной с позициями вспомогательного массива, это упрощает логику.
Как только все изменения завершены, вы можете просто сопоставить новые позиции массива со значениями последовательности элементов.