从admin命名空间渲染自定义错误页面

时间:2015-03-06 04:16:59

标签: ruby-on-rails ruby-on-rails-4 rails-admin

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

1 个答案:

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