【问题标题】:404 Custom Error Pages in Rails 2.3Rails 2.3 中的 404 自定义错误页面
【发布时间】:2023-03-28 06:46:01
【问题描述】:
每当出现错误时,我都会覆盖 render_optional_error_file 以呈现自定义页面。如果应用程序中出现错误,这非常有用,它会毫无问题地呈现“shared/error.erb”。
我的应用程序控制器有几个 before_filters 负责设置页面的配色方案、定义菜单项和验证用户。当出现应用程序错误时,它们也会运行,这是需要的。
但是,当呈现文件的 404 页面时,这些过滤器都没有运行,所以我得到一个没有菜单的黑色页面。有没有办法可以触发这些运行?我有什么理由不应该这样做?
【问题讨论】:
标签:
ruby-on-rails
custom-error-pages
ruby-on-rails-2
【解决方案1】:
当 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
【解决方案2】:
好吧,您可能需要考虑为您的错误页面创建一个特殊的布局。毕竟,让错误页面与正常页面明显区分开来是一种常见的做法。
但我不明白为什么您在应用程序控制器中定义的之前的过滤器不会触发。它们确实应该在您的操作中发生任何错误之前触发。
您能否提供一些来自您的应用程序控制器的代码?