Rails 6配置jQuery后remote:true链接触发FavoritesController模板缺失如何解决
问题原因
报错提示FavoritesController的update动作缺少对应text/html格式的模板,核心原因是你配置的remote: true未生效,Rails UJS没有将链接请求转换为JS格式的Ajax请求,导致请求以默认HTML格式发送。
解决方案
- 修正application.js的加载顺序
Rails UJS 必须在Turbolinks之前加载才能正确接管页面元素的remote属性,你当前的加载顺序错误,将javascript/packs/application.js的内容调整为:
- 修正application.js的加载顺序
require("@rails/ujs").start() require("turbolinks").start() require("@rails/activestorage").start() require("channels") require("jquery")
- 给链接强制指定JS请求格式
在link_to的路由参数中添加format: :js,强制请求返回JS格式响应,修改views/annonces/show.html.erb中的链接代码为:
- 给链接强制指定JS请求格式
<%= link_to favorite_text, favorites_update_path(annonce: @annonce, format: :js), id: "favorite_link", remote: true %>
- 可选:优化控制器响应逻辑
如果不需要HTML格式的响应,可以把controller中format.html的分支改为重定向,避免缺失模板报错:
- 可选:优化控制器响应逻辑
respond_to do |format| format.html { redirect_back fallback_location: root_path } format.js {} end
验证方法
修改完成后重启Rails服务,点击收藏链接,打开浏览器控制台的网络面板,查看对应请求的请求头Accept字段包含text/javascript即代表配置生效,不会再报模板缺失错误。
内容的提问来源于stack exchange,提问作者lucas_grandviergne
相关产品推荐
相关产品推荐

