You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails中Jquery UI Autocomplete JSON响应失效问题求助

问题分析与解决方案

你遇到的问题核心在于后端没有处理JQuery UI Autocomplete自动发送的搜索关键词参数。当使用远程数据源时,Autocomplete会在请求里自动带上一个名为term的参数(值就是用户输入的内容),但你当前的后端代码直接返回了所有技能,完全没对这个参数做过滤,所以不管输入什么字符,都会显示全部技能列表。

1. 修改后端控制器动作

更新HomeController里的skills_autocomplete方法,加入对term参数的过滤逻辑:

def skills_autocomplete
  # 获取用户输入的关键词,转成小写避免大小写匹配问题,默认空字符串防止nil报错
  term = params[:term].to_s.downcase
  # 模糊匹配名称包含关键词的技能,按名称排序后提取名字数组
  @skills = Skill.where("LOWER(name) LIKE ?", "%#{term}%").order(:name).map(&:name)
  render json: @skills
end

如果你的数据库是PostgreSQL,可以用更简洁的ILIKE实现不区分大小写匹配:

@skills = Skill.where("name ILIKE ?", "%#{term}%").order(:name).map(&:name)

这里用?占位符是Rails推荐的安全写法,能有效防止SQL注入,千万不要直接把参数拼进SQL字符串里。

2. 前端代码微调(可选)

你的前端代码本身没问题,但可以把路径写得更明确,避免相对路径带来的潜在问题:

$(function() {
  $('#skills').autocomplete({
    source: '/skills_autocomplete'
  });
});

Autocomplete会自动在请求URL后追加?term=用户输入内容,不需要你手动处理参数。

验证效果

现在在搜索框输入关键词,后端会只返回包含该关键词的技能名称,Autocomplete就能正确显示匹配的候选结果了。

内容的提问来源于stack exchange,提问作者Ravi Kumar SIngh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:30:22