0

У меня есть модель Rails с относительно небольшим количеством записей (в настоящее время на ~ 300 и, вероятно, никогда не пройдет 1000).Autocomplete Vs Pagination

В настоящее время он разбивает страницы на своей индексной странице, чтобы показать 20 результатов на странице.

Я только что добавил Twitter Typeahead в поле поиска, и я использую имена записей, чтобы предоставить предложения автозаполнения. Проблема в том, что по мере того, как я разбиваю страницы на результаты, я могу только предлагать предложения для 20 элементов из текущей разбитой на страницы партии.

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

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

ответ

1

Вы можете получить имена отдельно с помощью pluck.

@names = MyModel.pluck(:name) 

Обратите внимание, что в Rails 3 вы можете обеспечить только 1 имя столбца в качестве аргумента для pluck.

Разбивка обычно применяется к LIMIT, поэтому единственный способ сохранить все записи - это сделать другой запрос.

С pluck вы извлекаете поле, которое хотите получить из базы данных, и у вас не будет накладных расходов, которые принесут ActiveRecord, когда вы пройдете полную коллекцию всех своих моделей.

+0

Спасибо. На самом деле просто читал о 'pluck'. Является ли производительность действительно намного лучше? – Undistraction

+0

Да, вы извлекаете меньше данных из базы данных, и вам не нужно проходить через «ActiveRecord», так как вы напрямую обращаетесь к базе данных. Ruby медленный, SQL - нет. – Arjan

Смежные вопросы