Rails 2.3中的404自定义错误页面

时间:2011-06-29 09:29:01

标签: ruby-on-rails custom-error-pages ruby-on-rails-2

我正在重写render_optional_error_file,以便在出现错误时呈现自定义页面。如果应用程序中存在错误,这会很有效,它会毫无问题地呈现“shared / error.erb”。

我的应用程序控制器有一些before_filters,负责设置页面的颜色方案,定义菜单项和验证用户。当出现应用程序错误时,这些也会运行。

但是,当呈现文件的404页面时,这些过滤器都不会运行,因此我得到一个没有菜单的黑页。有没有办法可以触发它们运行?我有什么理由不这样做吗?

2 个答案:

答案 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)

好吧,您可能需要考虑为错误页面创建一个特殊的布局。毕竟,通常的做法是使错误页面与正常页面清晰可辨。

但是我不明白为什么你的应用程序控制器中定义的过滤器不会触发。他们确实应该在之前触发您的操作中发生任何错误。 你能从我们的应用程序控制器那里向我们提供一些代码吗?