Rails问题:错误信息显示在终端但不显示于HTML页面
问题分析与解决
核心原因
终端能看到错误输出但页面不显示,是因为表单提交后控制器用了redirect_to,导致包含错误信息的@article实例丢失:
- 终端里的
puts输出来自表单提交的请求,此时@article确实携带错误; - 但
redirect_to会触发浏览器发起新请求,新请求中控制器会重新创建空白的@article实例,@article.errors.any?返回false,所以页面显示"All is fine."
解决步骤
- 修改控制器的创建/更新动作,把失败分支的
redirect_to替换为render:def create @article = Article.new(article_params) if @article.save redirect_to @article # 保存成功时重定向没问题 else render :new # 保存失败时用render,不要用redirect_to end end - 你的视图代码本身没有问题,
<%= error.full_message %>会正确输出错误到页面,只要@article实例保留了错误信息,就能正常展示。
原理说明
redirect_to是HTTP重定向,会生成全新请求,原有实例数据会被丢弃;render是在当前请求内渲染视图,会保留原@article实例及其错误信息,这样视图就能读取到错误并展示。
内容的提问来源于stack exchange,提问作者cluster1
相关产品推荐
相关产品推荐

