从管理命名空间呈现自定义错误页面

Rendering custom error page from admin namespace

我在 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。

我目前仅在从管理命名空间调用 not_found 时收到以下错误:Missing template [project path]/public/404.html。如何使用相同的视图从管理员那里使用 not_found

我省略了一个我认为不相关但结果很重要的细节:我正在使用 rails_admin。在细读这个优秀 gem 的源代码时,我注意到它定义了自己的 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