gpt4 book ai didi

ruby-on-rails - Rails 在 before_action 中渲染和返回,DoubleRenderError

转载 作者:行者123 更新时间:2023-12-03 18:33:48 25 4
gpt4 key购买 nike

在带有 before_action 的 Controller Action 中,使用 render something and return 实际上不会导致 Controller 停止执行 Action 的其余部分。在我的测试中,只有在 Controller 操作中调用时,and return 才会按我的预期工作。

# DoubleRenderError
class SomeController < ApplicationController
before_filter :double_render, only: [:index]

def index
render file: "public/500.html", status: :internal_server_error
end

def double_render
render file: "public/404.html", status: :not_found and return
end
end

# Renders 404 only, no error
class SomeController < ApplicationController
def index
render file: "public/404.html", status: :not_found and return
render file: "public/500.html", status: :internal_server_error
end
end

这里发生了什么? before_actions 可以停止 Controller 执行的其余部分吗?

最佳答案

如果您打算呈现 404 页面,则不应在 before_filter 中手动呈现它。正确的做法是引发路由错误,如下所示:
raise ActionController::RoutingError.new('Not Found')
您可以实现一个名为“render_404”的方法,在其中引发此异常,然后让路由系统完成剩下的工作。

编辑:实际上,您的代码应该可以工作。我真的不知道发生了什么。我在这里写了同样的东西并且它起作用了 - 如果 before_filter 呈现某些东西,则永远不会调用 action 方法。您使用的是哪个版本的 Rails?

关于ruby-on-rails - Rails 在 before_action 中渲染和返回,DoubleRenderError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25409805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com