在Rails应用程序中,您将使用什么来自动完成?

时间:2010-05-02 10:43:11

标签: jquery ruby-on-rails forms autocomplete prototypejs

我想在表单中的许多字段(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?

2 个答案:

答案 0 :(得分:2)

我使用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/

答案 1 :(得分:1)

免责声明:这个答案仅涵盖jQuery的一半问题,因为我没有使用Prototype自动完成插件的经验,我会留给那些有专业知识回答的人。

首先,我会坚持使用你已经在使用的框架中编写的插件,没有必要从原型切换到jquery,反之亦然。

如果您尚未使用框架或正在使用jQuery,我建议jQuery UI autocomplete(与您链接的不同)主要围绕它提供和提供的支持和可扩展性。

无论您正在查看哪个框架,一旦插件形成或被拉入任何核心库(在这种情况下为jQuery UI),它就会获得更多的支持,并且社区更容易建立在它,使它更好,更可扩展。此外,如果您遇到麻烦,您更有可能找到问题的答案。

对于rails部分,有一些文章突出显示如何使用此自动完成插件专门使用rails I'd get started here