你会在 Rails 应用程序中使用啥来自动完成?
Posted
技术标签:
【中文标题】你会在 Rails 应用程序中使用啥来自动完成?【英文标题】:What would you use for auto completion in Rails app?你会在 Rails 应用程序中使用什么来自动完成? 【发布时间】:2011-02-14 17:46:56 【问题描述】:我想在表单的多个字段 (5-7) 中使用自动完成功能。 Ryan Bates (http://railscasts.com/episodes/102-auto-complete-association) 有一个关于使用Prototype
库自动完成的截屏视频。另一方面,我注意到很多人建议jQuery
完成这项任务(http://jquery.bassistance.de/autocomplete/demo/)。我想,去年可能有一些发展,所以我问你 - 现在你会用什么来自动完成你的表单字段,为什么?
顺便说一句,关于 HABTM 关联的自动完成,我还有一个悬而未决的问题: How to do HABTM management with auto completion in Rails?
【问题讨论】:
【参考方案1】:我使用 YUI auto-complete。工业实力,用于 Yahoo、Flickr 和其他 A 级网络资产。
性能
在 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
还为 SearchPost 创建一个 ActiveRecord 模型。它将从视图中拉出。
然后,在您的控制器中:
# 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 使用的架构:将您的整个帖子标题和 ID 数据库下载到浏览器并在本地搜索它们。见http://code.flickr.com/blog/2009/03/18/building-fast-client-side-searches/
【讨论】:
【参考方案2】:免责声明:此答案仅涵盖 jQuery 问题的一半,因为我没有使用 Prototype 自动完成插件的经验,我将把它留给有专业知识的人来回答。
首先,我会坚持使用您已经在使用的框架中编写的插件,无需从原型切换到 jquery,反之亦然。
如果您尚未使用框架或正在使用 jQuery,我建议您使用 jQuery UI autocomplete(与您链接的不同),主要是围绕它提供并将提供的支持和可扩展性。
不管你在看哪个框架,一旦一个插件形成或被拉入任何核心库(在这种情况下为jQuery UI),它就会得到更多的支持,社区更容易在它的基础上构建,使其更好,更具可扩展性。此外,如果您遇到麻烦,您更有可能找到问题的答案。
对于 rails 部分,弹出了一些关于如何将这个自动完成插件专门用于 rails 的文章,I'd get started here。
【讨论】:
以上是关于你会在 Rails 应用程序中使用啥来自动完成?的主要内容,如果未能解决你的问题,请参考以下文章