bro*_*ney 1 ruby-on-rails before-filter ruby-on-rails-4
在具有before_action的控制器操作中,using render something and return
实际上并不会导致控制器停止执行其余操作.在我的测试中,只有在控制器操作中调用时才能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
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?before_actions可以停止控制器执行的其余部分吗?
如果您打算渲染404页面,则不应在before_filter中手动渲染它.正确的方法是引发路由错误,如下所示:
raise ActionController::RoutingError.new('Not Found')
您可以实现一个名为"render_404"的方法,在其中引发此异常并让路由系统完成剩下的工作.
编辑:实际上,你的代码应该工作.我真的不知道发生了什么.我在这里写了同样的东西并且它有效 - 如果before_filter呈现某些东西,则永远不会调用action方法.你使用的是什么版本的Rails?