我已经被困了几天了。我一直在使用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调用,并相应地调整视图。
我是铁杆的新人,所以我确定我在这里犯了一个愚蠢的错误。任何帮助都会非常感激。
谢谢
答案 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?