Я использую YUI автозаполнение . Промышленная сила, используемая в Yahoo, Flickr и других веб-ресурсах класса А.
Производительность
В Rails, для лучшей производительности по автозаполнению (независимо от того, какой виджет вы используете), вы должны создать представление в вашей базе данных для вашей информации поиска. Например, вы хотите использовать автозаполнение, чтобы позволить человеку быстро искать свои сообщения по названию (а не по содержанию).
Создать представление:
# Rake task code for creating a view
def self.search_posts #
execute "DROP Table IF EXISTS search_posts"
execute "DROP View IF EXISTS search_posts"
execute "CREATE View search_posts AS
SELECT
p.id
, p.title
, p.user_id
FROM posts p
ORDER BY p.title
"
end
Также создайте модель ActiveRecord для SearchPost. Это будет тянуть из вида.
Тогда в вашем контроллере:
# Return the id's and title's matching the search query
# Assumptions: current user id is in Session[:user_id]
# Auto complete query is in params[:query]
SearchPost.find_all(
:conditions => ["user_id = ? and title LIKE ?",
Session[:user_id], "%#{params[:query]}%"]
).collect{|rec| {'title' => rec.title, 'id' => rec.id}.to_json
Выгода
Вы хотите свести к минимуму объем данных, просматриваемых через базу данных для запросов Ajax, которые отправляет вам виджет автозаполнения.
Местное автозаполнение
Еще одна архитектура с автоматическим заполнением - это та, которую использует Flickr: загрузите всю свою базу данных заголовков и идентификаторов в браузер и найдите их локально. См http://code.flickr.com/blog/2009/03/18/building-fast-client-side-searches/