Вы можете найти справку здесь
Как указал @Gabbar, и я добавлю к нему, ваше приложение сейчас eager-loading (противоположно отложенная загрузка ), что означает, что вы загружаете из базы данных больше, чем нужно. Что нам нужно сделать, так это оптимизировать, но это полностью зависит от вашего варианта использования.
Независимо от варианта использования, вы можете сделать несколько общих вещей, чтобы сделать вещи лучше: Вы можете реализовать нумерацию страниц (есть гемы для это и вы тоже можете сделать сами) или бесконечная прокрутка. В этом случае вы сначала будете загружать определенное количество записей из БД, но как только пользователь захочет больше, он либо прокрутит вниз, либо нажмет кнопку «Далее», и ваше действие будет вызвано снова, но с шагом на странице. число, которое означает получение следующего набора записей.
Реализация на основе прокрутки включает JS и view-height et c. но нумерация страниц намного проще.
Драгоценные камни:
камень каминари
бесконечные страницы
Использование includes
Еще одна вещь, которую вы должны сделать, это использовать включить в запрос, если ваши записи связаны между собой. Использование include сложно, но очень полезно для экономии времени. Он будет извлекать необходимую нужную запись вместе в одной go из базы данных, в отличие от того, как ваш код отправляется туда и обратно в базу данных несколько раз. Выборка из базы данных занимает много времени по сравнению с выборкой из ОЗУ.
@users = User.all.includes(:comments) #comments for all users brought along with users but saved in RAM for future access.
@comments = @users.map(&:comments) # no need to go to db again, just RAM.
Использование scopes
в моделях:
Создание областей в моделях также помогает. В вашем случае вы должны создать такие области:
scope :archived_customers, -> { where('archived IS false') }
scope :potential_customers, -> { where('active IS false') }
**OR**
scope :archived_customers, -> { where(:archived => false) }
scope :potential_customers, -> { where(:active => false) }