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 自动完成的主要内容,如果未能解决你的问题,请参考以下文章