Rails带remote: true的post请求link_to控制器重定向失效问题
问题原因
你给link_to加了remote: true参数,这代表该请求是AJAX异步请求,Rails默认服务端返回的redirect_to指令对AJAX请求不生效,浏览器不会自动执行重定向操作,需要额外返回JS逻辑触发前端跳转。
解决方法
根据你的业务需求选以下任意一种方案即可:
- 方案1:不需要异步交互,直接删除
link_to中的remote: true参数,修改后代码如下:
此时请求为同步提交,控制器中原有的<%= link_to "Click here", check_path, method: :post %>redirect_to other_path逻辑会正常生效。 - 方案2:需要保留异步交互能力,修改控制器的校验响应逻辑:
将你控制器中place不存在时的重定向逻辑替换为返回JS跳转指令,示例代码如下:
该方案不需要修改前端def check_payer # 你原有的place存在性校验逻辑 unless @place.present? respond_to do |format| format.js { render js: "window.location.href = '#{other_path}'" } end return end # 你原有的其他业务逻辑 endlink_to代码,服务端返回的JS代码会自动触发浏览器跳转。
注意事项
- 确保你的全局布局文件(通常是
app/views/layouts/application.html.erb)中包含<%= csrf_meta_tags %>标签,避免POST请求出现CSRF校验错误。 - 如果你配置了路由约束,需要确保
check_path支持JS格式的响应,默认Rails路由配置无额外约束时无需修改。
内容的提问来源于stack exchange,提问作者Caio Felipe
相关产品推荐
相关产品推荐

