Rails 6.0升级异常:JS请求渲染HTML模板而非JS模板
Rails 6.0 升级后 respond_to 渲染异常问题解决
问题原因
- Rails 6.0 调整了隐式渲染的模板查找逻辑,未显式指定模板时,可能出现格式匹配偏差;
- Rails 6.0 不再默认集成
coffee-railsgem,导致.js.coffee模板的解析支持缺失,即便请求被识别为 JS 格式,也可能无法正确匹配对应模板,进而 fallback 到 HTML 模板。
解决办法
1. 显式指定渲染模板
在 format.js 块中明确指定模板路径,强制 Rails 渲染对应格式的模板:
def new @post = Post.new respond_to do |format| format.js { render 'new' } format.html end end
此方式可绕过隐式渲染的模板查找逻辑,直接指向 new.js.coffee 模板。
2. 恢复 CoffeeScript 支持
在 Gemfile 中手动添加 coffee-rails 依赖:
# Gemfile gem 'coffee-rails', '~> 5.0'
执行 bundle install 后重启服务器,确保 Rails 能正确解析 .js.coffee 格式的模板文件。
3. 验证模板命名与位置
确认 new.js.coffee 文件存在于 app/views/posts/ 目录下,文件名无拼写错误,扩展名需严格为 .js.coffee(注意顺序,不可写为 .coffee.js)。
4. 检查 MIME 类型配置(可选)
确保 config/initializers/mime_types.rb 中正确注册了 JS 类型:
Mime::Type.register "text/javascript", :js
默认情况下 Rails 已配置此项,若之前有修改可验证恢复。
内容的提问来源于stack exchange,提问作者Mark Thomson
相关产品推荐
相关产品推荐

