我正在将动态错误页面实现到应用程序中,感觉它正在public
文件夹中查找(现在不存在的)模板,而不是按照我设置的路径。
在config/application.rb
我添加了行config.exceptions_app = self.routes
来解释此问题。
然后我将以下内容添加到我的路线中:
get "/not-found", :to => "errors#not_found"
get "/unacceptable", :to => "errors#unacceptable"
get "/internal-error", :to => "errors#internal_error"
错误控制器看起来像这样:
class ErrorsController < ApplicationController
layout 'errors'
def not_found
render :status => 404
end
def unacceptable
render :status => 422
end
def internal_error
render :status => 500
end
end
转到/not-found
会显示模板,但访问任何不存在的网址(即/ i-dont-exist)会呈现空白页面。
我能看到的唯一原因是异常处理需要路由,例如get "/404", :to => "errors#not_found"
,但具有讽刺意味的是,它找不到/ 404的路由(不,不是只是它工作:))。
任何建议,非常感谢。谢谢,史蒂夫。
答案 0 :(得分:5)
似乎有些设置是错误的。 在你的路线中试试这个:
match '/404', to: 'errors#not_found', via: :all
(匹配而非获取)
你在application.rb
中提到config.exceptions_app = self.routes
,这很好。但请确保在测试更改之前重新启动服务器。
确保您的错误观看文件的名称与ErrorsController
中的操作相同。
如果您在控制台中遇到任何(haha)错误,可以发布吗?
答案 1 :(得分:2)
请改为:
<强>的routes.rb 强>
%w(404 422 500).each do |code|
get code, :to => "errors#show", :code => code
end
<强> errors_controller.rb 强>
class ErrorsController < ApplicationController
def show
render status_code.to_s, :status => status_code
end
protected
def status_code
params[:code] || 500
end
end
在 config / application.rb 中确保您拥有:
module YourWebsite
class Application < Rails::Application
config.exceptions_app = self.routes
# .. more code ..
end
end
然后您将需要这些视图,显然;)不要忘记删除公共目录中的错误页面。