Rails中用js.coffee渲染Partial遇问题:点击提交无效果仅显代码
解决Rails中CoffeeScript渲染Partial显示代码而非内容的问题
嘿,作为Rails新手碰到这个问题太正常啦!我来帮你拆解下问题根源和解决办法:
核心问题:文件扩展名没让Rails处理ERB代码
你的my.js.coffee文件默认只会被编译成JavaScript,但里面的<%= escape_javascript(...) %>是Rails的ERB模板语法,CoffeeScript本身不认识它,所以会直接把这段代码原封不动输出到前端,导致点击按钮后显示的是代码而非渲染后的Partial内容。
解决步骤
1. 重命名文件(关键!)
把你的my.js.coffee改名为my.js.coffee.erb。这个扩展名的顺序很重要:Rails会先通过ERB引擎解析文件里的Ruby代码,再把结果编译成CoffeeScript,最后转成浏览器能识别的JavaScript。
2. 简化代码写法(可选但更规范)
Rails里有个j方法是escape_javascript的简写,用它可以让代码更简洁,同时确保渲染的HTML能安全插入到JavaScript中。修改后的CoffeeScript代码如下:
$(document).ready -> $('#results').empty() $('.check').click -> $('#results').empty() # 用j替代escape_javascript,render直接传入partial名称即可 $('#results').html("<%= j render('result') %>") return return
3. 验证Partial路径是否正确
确保你的_result.html.erb文件存在:
- 如果和
index.html.erb在同一个控制器的视图文件夹下,render('result')就没问题; - 如果Partial放在
app/views/shared目录下,要写成render('shared/result')。
4. 调试小技巧
- 打开浏览器控制台(F12),点击按钮后看有没有JavaScript报错,比如元素选择器是否正确(#results或.check是否存在);
- 查看服务器日志,确认Rails是否成功找到了Partial文件(如果找不到会有类似
Missing partial ...的报错)。
这样修改后,点击提交按钮应该就能正常渲染Partial内容啦!
内容的提问来源于stack exchange,提问作者M Andi
相关产品推荐
相关产品推荐

