代码之家  ›  专栏  ›  技术社区  ›  Andy

在rails应用程序中,你会使用什么来自动完成?

  •  2
  • Andy  · 技术社区  · 14 年前

    我想在表单中的许多字段(5-7)中使用自动完成。有一个关于自动完成的屏幕 Prototype 瑞安·贝茨的图书馆( http://railscasts.com/episodes/102-auto-complete-association )另一方面,我注意到很多人建议 jQuery 为了这个任务( http://jquery.bassistance.de/autocomplete/demo/ )我想,去年可能有一些进展,所以我问你-你现在会用什么来自动填写表单域,为什么?

    顺便说一下,我对HABTM协会的自动完成还有一个问题: How to do HABTM management with auto completion in Rails?

    2 回复  |  直到 13 年前
        1
  •  1
  •   Nick Craver    14 年前

    免责声明:这个答案只包含jquery问题的一半,因为我没有使用原型自动完成插件的经验,所以我将留给有专业知识的人来回答。

    首先,我将坚持使用一个在您已经使用的框架中编写的插件,不需要从prototype切换到jquery,反之亦然。

    如果您还没有使用框架或使用jquery,我建议您使用 jQuery UI autocomplete (与您链接的不同)主要围绕它提供和将提供的支持和扩展性。

    不管你在看哪个框架,一旦一个插件形成或者被拉到任何核心库中( jQuery UI 在这种情况下)它得到了更多的支持,社区也更容易建立在它的基础上,使它更好、更具扩展性。另外,如果你遇到麻烦,你更有可能找到你的问题的答案。

    对于rails部分,有一些关于如何将这个自动完成插件专门用于rails的文章层出不穷, I'd get started here .

        2
  •  2
  •   Larry K    14 年前

    我用YUI auto-complete . 工业实力,用于雅虎、flickr等甲级网络物业。

    性能

    在rails中,为了在auto-complete上获得最佳性能(不管您使用哪个小部件),您应该在数据库中创建一个视图来查看查找信息。例如,你想使用自动完成功能,使人们能够按标题(而不是按内容)快速搜索他的文章。

    创建视图:

    # 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使用的架构:将整个post标题和id数据库下载到浏览器中,并在本地进行搜索。见 http://code.flickr.com/blog/2009/03/18/building-fast-client-side-searches/