你会在 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 应用程序中使用啥来自动完成?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3 个不同的自动完成字段

如何在rails应用程序中使用jquery自动完成

将 Amadeus 机场和城市搜索自动完成添加到 Rails 应用程序

你用啥来单元测试C代码? [复制]

如何在 Rails 中为现有模型添加自动完成标记?

iOS - 我应该使用啥来保存数据