我在Rails 4应用程序中有自定义错误页面,在ApplicationController
中有一个方法,我在某些地方用它来手动引发RoutingError
:
def not_found
raise ActionController::RoutingError.new('Not Found')
end
ErrorsController
有一个file_not_found
操作,并带有相应的视图。 routes.rb
具有以下内容:
match '/404', to: 'errors#file_not_found', via: :all
所有这些都允许我在我的控制器中编写not_found unless item.available
等代码来强制执行404.
我只有在从admin命名空间调用not_found
时才会收到以下错误:Missing template [project path]/public/404.html
。如何使用相同的视图从管理员使用not_found
?
答案 0 :(得分:0)
我省略了一个我认为不相关的细节,但结果证明是至关重要的:我正在使用rails_admin
。在仔细阅读这个优秀宝石的来源时,我注意到它定义了自己的not_found
方法here:
def not_found
render :file => Rails.root.join('public', '404.html'), :layout => false, :status => 404
end
要覆盖它,我在config/initializers/rails_admin_not_found.rb
中添加了以下代码:
RailsAdmin::ApplicationController.module_eval do
def not_found
raise ActionController::RoutingError.new('Not Found')
end
end