Я хотел бы разбить на страницы отсортированный случайным образом список моделей ActiveRecord (строки из базы данных MySQL).
Однако эта рандомизация должна сохраняться для каждой сессии, так что другие люди, которые посещают веб-сайт, также получают случайный, разбитый на страницы список записей.
Допустим, существует достаточно сущностей (десятки тысяч), которые слишком случайно хранят случайно отсортированные значения идентификатора в сеансе или в файле cookie, поэтому я должен временно сохранить его каким-либо другим способом (MySQL, файл и т. Д.). .
Первоначально я думал, что мог бы создать функцию на основе идентификатора сеанса и идентификатора страницы (возвращая идентификаторы объекта для этой страницы), однако, поскольку значения идентификатора объекта в MySQL не являются последовательными (есть пробелы), которые, казалось, падали кроме как я тыкал в это. Приятно то, что для этого не требуется никакого / минимального хранилища, но недостатком является то, что он, вероятно, довольно сложен в реализации и, вероятно, интенсивно использует процессор.
Мне кажется, я должен создать таблицу пересечений, что-то вроде:
random_sorts( sort_id, created_at, user_id NULL if guest)
random_sort_items( sort_id, item_id, position )
А затем просто сохраните «sort_id» в сеансе. Затем я могу разбить на страницы random_sorts WHERE sort_id = n ORDER BY LIMIT позиции ... как обычно.
Конечно, мне нужно было бы поместить какой-нибудь жнец, чтобы убрать их после некоторого периода бездействия (на основе random_sorts.created_at).
К сожалению, мне пришлось бы сделать недействительной сортировку по мере создания новых объектов (и / или удаления старых объектов, хотя удаление происходит очень редко). И, по мере увеличения нагрузки, размер / производительность этой таблицы (даже при правильной индексации) падает.
Кажется, что это должно быть решенной проблемой, но я не могу найти плагинов rails, которые делают это ... Есть идеи? Спасибо !!