Rails 3.2.1 Jquery自动完成

时间:2012-03-02 03:10:44

标签: jquery ruby-on-rails ruby search autocomplete

我已经被困了几天了。我一直在使用railscast#102作为模板进行修改。

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

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

- 机会模型,搜索NAME属性

- 搜索控制器

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

Search.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”为127.0.0.1 由SearchController#index处理为JSON
  参数:{“term”=&gt;“b”}
  机会负荷(0.3ms)选择“机会”。* FROM“机会”WHERE(名称如'b')ORDER BY opportunities.name,name
在1ms内完成200 OK(浏览次数: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调用,并相应地调整视图。

我是铁杆的新人,所以我确定我在这里犯了一个愚蠢的错误。任何帮助都会非常感激。

谢谢

1 个答案:

答案 0 :(得分:1)

看来你没有在你的声明中加入任何外卡

@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?