Rails 5: Самый быстрый способ получить огромные записи в избранных - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть приложение Rails, которое загружает более 2 тыс. Регистров из модели на выбор с кокон для ассоциации.Я уже использую плагин select2 jQuery для его прокрутки и поиска по темам, но он загружается очень медленно.

<%= f.select :subject_id, options_for_select(Subject.all.map{ |c| [c.name, c.id, {}] }, f.object.subject_id), {include_blank: 'Select a subject'}, {required: true, class: "select2 "} %>

Эта модель загружает более 2 000 регистров из модели и медленно выбирает загрузку select, что является лучшимпрактика быстрее загружать реестр из модели для пользователя?

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Вы никогда не должны загружать 2к записей сразу из БД, ваши данные должны быть разбиты на страницы / ограничены для каждого запроса.У вас будут проблемы с производительностью Ruby (проблемы с памятью), и ваш JS будет работать очень плохо.

Одно из возможных решений - переместить записи из SQL в Redis.Потому что Redis быстрее.Затем извлеките данные из Redis.

Для обработки больших наборов данных в Select2 выполните следующее plnkr: http://embed.plnkr.co/db8SXs/preview

0 голосов
/ 28 сентября 2018

Я получил решение с параметрами Select2.Я заставил его начать поиск только после того, как набрал последние 3 цифры.Таким образом, это больше не будет медленным с огромным количеством данных.

$(".select2").select2({
          width: '100%',
          placeholder: 'Start ',
          minimumInputLength: 2,
          tags: true
        });
0 голосов
/ 26 сентября 2018

Вы должны рассмотреть возможность использования плагина javascript, такого как Select2, который позволит вам искать ваши ассоциации с удаленным вызовом ajax.Вы можете увидеть Select2 ajax в действии здесь https://select2.org/data-sources/ajax.

Затем вам нужно будет инициализировать select2 в javascript и убедиться, что ваш контроллер регистров реагирует на json (вы также должны разбить на страницы эти результаты, например:камень Каминари).

Каждый раз, когда вы добавляете ссылку на ассоциацию, которая может содержать много записей, вы можете использовать этот удаленный метод для выбора записей.

Если вы обнаружите, что у вас много ассоциацийдля которого требуется такое же поведение удаленного поиска, вы можете использовать гем, такой как SimpleForm, чтобы сделать многоразовый пользовательский ввод , который обрабатывает настройку этого поведения для вас.

...