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

升级到Rails 6.1后提交评论返回JSON时出现意外跳转问题

Rails 6.1升级后评论提交跳转JSON页面问题解决方案

问题根因

你猜测的render_to_string相关问题不成立,该方法仅负责服务端渲染评论模板片段,和前端跳转行为无关。
触发跳转的核心原因是Rails 6.1调整了form_with的默认配置:

  • Rails 6.1之前版本:form_with默认开启remote: true,走AJAX异步提交,提交后不会跳转页面
  • Rails 6.1及之后版本:form_with默认关闭异步提交,等同于普通form标签的同步提交行为,服务端返回JSON时浏览器就会直接渲染JSON内容

解决方案

方案1:单独调整当前表单的提交行为

直接在表单定义中添加local: false参数,强制开启异步提交:

<%= form_with model: Comment.new, id: 'new-comment', local: false do |f| %>
 <%= f.hidden_field :offer_id, value: @offer.id %>
 <div>
 <%= f.text_area :content %>
 <div class="mt-3 flex items-center justify-between">
  <%= f.submit "Comment", id:"comment-button"%>
 </div>
<% end %>

方案2:全局恢复旧版form_with默认行为

如果你的项目大量依赖form_with默认异步提交的特性,可以在全局配置中改回旧版默认逻辑,不需要逐个修改表单:
打开config/application.rb,在class Application < Rails::Application块内添加以下配置:

config.action_view.form_with_generates_remote_forms = true

修改完成后重启Rails服务即可生效。

额外优化建议

你当前控制器的create方法存在逻辑缺陷:评论保存失败时仍然返回success: true,会导致前端无法识别错误状态,建议修改为:

else
  render json: { success: false, errors: @comment.errors.full_messages }
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:27:02