【发布时间】: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 新手,所以我确定我在这里犯了一个愚蠢的错误。任何帮助将不胜感激。
谢谢
【问题讨论】:
标签: jquery ruby-on-rails ruby search autocomplete