Пользовательская страница ошибок — Ruby on Rails

Я пытаюсь настроить пользовательскую страницу ошибки на своем веб-сайте. Я следую инструкциям в блогу PerfectLine.

Это работает в случае, когда контроллер существует, но идентификатор не существует. Например, у меня есть контроллер блога, а идентификатор 4 не существует. Он показывает пользовательскую страницу ошибки

Но его нет в том случае, если не существует самого контроллера. Например, если я набираю какой-то случайный контроллер с числовым идентификатором, он не перехватывается методами, которые я настроил в контроллере приложения для перенаправления пользовательских страниц ошибок. В этом случае я получаю

ActionController::RoutingError (No route matches "/randomcontrollername"):

в терминале и страницу ошибки по умолчанию, которая поставляется с рельсами.

application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery

  unless Rails.application.config.consider_all_requests_local
    rescue_from Exception,                            :with => :render_error
    rescue_from ActiveRecord::RecordNotFound,         :with => :render_not_found
    rescue_from ActionController::RoutingError,       :with => :render_not_found
    rescue_from ActionController::UnknownController,  :with => :render_not_found
    rescue_from ActionController::UnknownAction,      :with => :render_not_found
  end

  private
  def render_not_found(exception)
     render :template => "/error/404.html.erb", :status => 404
  end

  def render_error(exception)
    render :template => "/error/500.html.erb", :status => 500 
  end

end

Не могли бы вы мне помочь. Спасибо.


person felix    schedule 24.12.2010    source источник


Ответы (2)


Вы можете сделать это с помощью подстановки маршрута в рельсах. Он позволяет сопоставлять любое действие с любой частью маршрута с помощью подстановочных знаков.

Чтобы перехватить все оставшиеся маршруты, просто определите сопоставление маршрутов с низким приоритетом как последний маршрут в config/routes.rb:

В рельсах 3: match "*path" => 'error#handle404'

В рельсах 2: map.connect "*path", :controller => 'error', :action => 'handle404'

params[:path] будет содержать соответствующую часть.

person Reza Hashemi    schedule 25.12.2010

Если вам не нужны динамические страницы ошибок, просто отредактируйте public/404.html и public/505.html. Если да, см. ответ Reza.mp.

person sarahhodne    schedule 31.12.2010