Страница пользовательских ошибок - Ruby on Rails - PullRequest
10 голосов
/ 24 декабря 2010

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

Работает в том случае, если контроллер существует, но идентификатор не существует.Например, у меня есть контроллер блога, а id 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

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

Ответы [ 2 ]

18 голосов
/ 25 декабря 2010

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

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

В Rails 3: match "*path" => 'error#handle404'

В Rails 2: map.connect "*path", :controller => 'error', :action => 'handle404'

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

4 голосов
/ 31 декабря 2010

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

...