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

国际化(i18n)后easy-autocomplete无法正常工作求助

解决easy-autocomplete + i18n后的ActionController::UnknownFormat错误

我之前碰到过一模一样的问题,这个错误本质是你的MainController#search接口接收到了application/json格式的请求,但Rails找不到对应格式的响应模板或处理逻辑。和i18n的关联在于:国际化配置后,可能你没注意到接口的格式处理被忽略,或者模板路径的优先级发生了变化。下面是几个靠谱的解决方法:

方法1:直接在控制器中返回JSON(最推荐)

不需要依赖视图模板,直接在search方法里指定返回JSON数据,这是最直接避免模板缺失问题的方式:

def search
  # 这里写你的查询逻辑,比如根据参数搜索数据
  @results = YourModel.where("name LIKE ?", "%#{params[:q]}%")
  
  # 直接返回JSON格式的结果,可按需指定返回字段
  render json: @results.as_json(only: [:id, :name]), status: :ok
end

这样Rails会直接生成JSON响应,不需要找任何模板文件,完美适配easy-autocomplete的AJAX请求。

方法2:创建对应的JSON视图模板

如果你需要更灵活的JSON结构(比如自定义字段、嵌套数据),可以在app/views/main/目录下创建search.json.jbuilder(或者search.json.erb),用jbuilder的示例:

# app/views/main/search.json.jbuilder
json.array! @results do |item|
  json.id item.id
  json.label item.name # easy-autocomplete通常需要label/value字段,按需替换
  json.value item.name
end

注意模板路径要和控制器对应(main对应MainController),i18n不会影响这个路径的匹配,只要文件存在就能被正确加载。

方法3:在路由中强制指定JSON格式

有时候请求的格式识别会出问题,你可以在路由里明确指定该接口只接受JSON请求:

# config/routes.rb
get '/search', to: 'main#search', format: :json

这样Rails会自动过滤非JSON格式的请求,也能避免格式匹配错误。

方法4:检查i18n配置是否干扰了格式处理

确认你的i18n配置没有修改默认的响应格式设置,比如不要在config/application.rb或初始化文件里有类似这样的代码:

# 不要这样写,会覆盖默认的多格式支持
config.action_view.default_formats = [:html]

保持默认的多格式支持,Rails就能正确识别并处理JSON请求。

调试小技巧

可以在search方法里加一行调试代码,确认请求的格式:

def search
  puts "Request formats: #{request.formats.inspect}" # 控制台会输出请求格式
  # ... 其他逻辑
end

如果输出确实是["application/json"],那上面的方法肯定能解决问题。

内容的提问来源于stack exchange,提问作者user9680695

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:37:44