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

如何取消控制器中super调用的redirect_to并替换为render?

解决DoorKeeper控制器重定向替换问题
  • 核心思路:先清空super触发的重定向响应,再执行自定义渲染
    调用super后,Doorkeeper已经给response设置了重定向规则,直接调用render会被之前的重定向覆盖。这时候可以用response.reset清空当前响应的所有状态(包括重定向头、状态码),之后再调用render就能生效。

示例代码:

class YourCustomController < Doorkeeper::AuthorizationsController # 假设继承的是这个控制器
  def new
    super
    # 重置已有响应,清除重定向设置
    response.reset
    # 渲染自定义模板或内容
    render 'custom_auth/new', locals: { some_var: 'value' }
  end
end
  • 为什么直接赋值新Response没用?
    Rails控制器的response是和当前请求上下文绑定的实例,直接替换成新的ActionDispatch::Response.new不会被Rails的请求处理流程识别,而response.reset是修改当前绑定的响应实例,清空所有之前的设置,让后续的render能重新构建响应。

  • 额外提醒
    如果super里有设置flash消息或其他上下文数据,你可以根据需求选择保留(比如flash.keep)或者清空,避免影响自定义渲染的页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:03:09