Rails 3.2.1 Jquery 自动完成

Posted

技术标签:

【中文标题】Rails 3.2.1 Jquery 自动完成【英文标题】:Rails 3.2.1 Jquery autocomplete 【发布时间】:2012-03-20 14:40:39 【问题描述】:

我已经被困了好几天了。我一直在使用经过修订的 railscasts #102 作为模板。

最终我计划在顶部菜单栏中使用 ajax 来查询两个单独模型的名称字段,这两个模型使用 jquery-ui 自动完成,单击时直接链接到所选搜索结果的显示操作。

p>

但我什至还没有,现在我只是想让自动完成功能与单个模型一起工作。这是我所拥有的:

-机会模型,搜索掉 NAME 属性

-搜索控制器

 def index  
     @opportunities = Opportunity.order(:name).where("name like ?", "#params[:term]")  
     render json: @opportunities.map(&:name)  
 end  

搜索.js.coffee

jQuery ->  
   $('#search').autocomplete  
   source: $('#search').data('autocomplete-source')  

搜索视图(/app/views/layouts/application.html.erb:

 <%= text_field_tag 'search', nil, :class => 'search-query ui-autocomplete-input', :placeholder => 'Search', data: autocomplete_source: search_path %>  

当我运行此代码时,当我在搜索框中输入字母时(假设我输入字母 B),我得到: 在 2012-03-01 15:17:40 -0800 开始 GET "/search?term=b" for 127.0.0.1 由 SearchController#index 处理为 JSON 参数:"term"=>"b" 机会负载 (0.3ms) SELECT "opportunities".* FROM "opportunities" WHERE (name like 'b') ORDER BY opportunity.name, name 1ms 内完成 200 OK (Views: 0.1ms | ActiveRecord: 0.3ms)

我现在期望发生的是自动完成将使用 B,选择模型中的所有名称,然后将它们下拉到自动完成中,相反,我什么也得不到,什么也没有发生。

如果我通过以下方式调整视图:

 <%= text_field_tag 'search', nil, :class => 'search-query ui-autocomplete-input', :placeholder => 'Search', data: autocomplete_source: @opportunities.map(&:name) %>  

然后自动完成将起作用,但每个带有搜索栏的页面都会将所有搜索词加载到客户端。由于可能有数千个名称,我不想加载所有数据,我希望对数据库进行 ajax 调用并相应地调整视图。

我是 Rails 新手,所以我确定我在这里犯了一个愚蠢的错误。任何帮助将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

您似乎没有在 like 语句中添加任何通配符

@opportunities = Opportunity.order(:name).where("name like ?", "#params[:term]")  

应该是

@opportunities = Opportunity.order(:name).where("name like ?", "%#params[:term]%") 

这与另一个问题有关: How to search for a text with Active Record in Ruby on Rails 3?

【讨论】:

非常感谢,这正是问题所在。哇,我想我盯着代码看了很久。

以上是关于Rails 3.2.1 Jquery 自动完成的主要内容,如果未能解决你的问题,请参考以下文章

Rails jQuery-自动完成客户端

未定义的方法“自动完成”rails 3和jquery

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

Rails 中的动态自动完成,使用 jQuery TokenInput 插件

使用 JSON 的 Rails Jquery 自动完成失败

当没有找到与 Rails 的 JQuery 自动完成匹配时如何显示响应