【问题标题】:Getting a 404 Not Found default error page "Active Record::RecordNotFound" when I have a custom page for that当我有一个自定义页面时,获取 404 Not Found 默认错误页面“Active Record::RecordNotFound”
【发布时间】:2013-11-29 14:24:51
【问题描述】:

我有一个 404 和 500 状态代码的自定义错误页面,当我输入 localhost:3000/something.html 时它工作正常。但是当我输入 localhost:3000/controller/element_of_a_model 时不起作用。

routes.rb:

if Rails.env.production? then
  unless Rails.application.config.consider_all_requests_local
    get '*not_found', to: 'errors#error_404'
    get '*internal_server_error', to: 'errors#error_500'
  end
else
  unless
    get '*not_found', to: 'errors#error_404'
    get '*internal_server_error', to: 'errors#error_500'
  end
end

错误控制器:

def error_404
    render_error 404
end

def error_500
    render_error 500
end

private
   def render_error(status)
       respond_to do |format|
           format.html { render 'error_' + status.to_s() + '.html', :status => status, :layout => 'errors'}
           format.all { render :nothing => true, :status => status }
   end
end

【问题讨论】:

    标签: ruby-on-rails http-status-code-404 custom-error-pages


    【解决方案1】:

    你必须把它放在应用程序控制器中:

    rescue_from ActiveRecord::RecordNotFound do |exception|
      render_error 404
    end
    
    
    def render_error(status)
      respond_to do |format|
        format.html { render 'error_' + status.to_s() + '.html', :status => status, :layout => 'errors'}
        format.all { render :nothing => true, :status => status }
      end
    end
    

    其实你的ErrorController会被路由触发,但是你必须为异常添加逻辑。

    【讨论】:

      猜你喜欢
      • 2014-01-26
      • 2019-12-16
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 2021-03-07
      • 2015-05-31
      相关资源
      最近更新 更多