我正在重写render_optional_error_file,以便在出现错误时呈现自定义页面。如果应用程序中存在错误,这会很有效,它会毫无问题地呈现“shared / error.erb”。
我的应用程序控制器有一些before_filters,负责设置页面的颜色方案,定义菜单项和验证用户。当出现应用程序错误时,这些也会运行。
但是,当呈现文件的404页面时,这些过滤器都不会运行,因此我得到一个没有菜单的黑页。有没有办法可以触发它们运行?我有什么理由不这样做吗?
答案 0 :(得分:2)
当Rails遇到丢失的文件时,它在应用程序控制器上运行状态为404的render_optional_error_file(404),但跳过所有过滤器,可能是因为已经发生错误。
我向我的应用程序控制器添加了一个名为run_filters的方法,然后从render_optional_error_file中调用它:
def run_filters
#run filters or whatever
end
def render_optional_error_file(status)
run_filters
render "shared/error", :status => status
end
您还可以在应用程序控制器中包含以下内容,在开发服务器上测试此行为:
alias_method :rescue_action_locally, :rescue_action_in_public
答案 1 :(得分:0)
好吧,您可能需要考虑为错误页面创建一个特殊的布局。毕竟,通常的做法是使错误页面与正常页面清晰可辨。
但是我不明白为什么你的应用程序控制器中定义的过滤器不会触发。他们确实应该在之前触发您的操作中发生任何错误。 你能从我们的应用程序控制器那里向我们提供一些代码吗?