gpt4 book ai didi

jquery - Rails 3.2.1 Jquery 自动完成

转载 作者:太空宇宙 更新时间:2023-11-03 16:34:46 24 4
gpt4 key购买 nike

我已经在这上面卡了好几天了。我一直在使用 railscasts #102 revised 作为模板。

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

但我还没到那一步,现在我只是想让自动完成功能与单个模型一起使用。这是我拥有的:

-机会模型,搜索 NAME 属性

-搜索 Controller

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

搜索.js.咖啡

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

搜索 View (/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 开始为 127.0.0.1 获取“/search?term=b”
由 SearchController#index 作为 JSON 处理
参数:{"term"=>"b"}
机会负载 (0.3ms) SELECT "opportunities".* FROM "opportunities"WHERE (name like 'b') ORDER BY opportunities.name, name
在 1 毫秒内完成 200 OK( View :0.1 毫秒 | ActiveRecord:0.3 毫秒)

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

如果我用以下方法调整我的观点:

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

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

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

谢谢

最佳答案

看起来你没有在你的 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?

关于jquery - Rails 3.2.1 Jquery 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9527457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com