2010-03-31 3 views
4

В моих рельсах приложении, которое я определил маршруты, так что пользователи могут получить доступ к записи как http://mydomain.com/qwe2Показать 404 вместо 500 в Rails

Но если они печатают неправильный «qwe2» они получают 500 страницу. Я думаю, что 404 будет более уместным.

Как изменить страницу с ошибкой, которая отображается? Спасибо

ответ

6

Единственная причина, по которой вы получаете код 500, - это то, что ваше приложение выдает исключение. Это может быть связано с отсутствующим маршрутом, в котором у вас нет ничего определенного, которое соответствует этому, или из-за того, что ваш контроллер или просмотр разбился.

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

Например, перебор всеохватывающего исключения ловец может быть определен как:

class ApplicationController < ActionController::Base 
    if (Rails.env.production?) 
    rescue_from Object, :with => :uncaught_exception_rescue 
    end 

protected 
    def uncaught_exception_rescue(exception) 
    render(:partial => 'errors/not_found', :status => :not_found) 
    end 
end 

Возвратившись ошибкой 404 типа легко, если вы можете сказать, когда вы хотите сделать это:

render(:partial => 'errors/not_found', :status => :not_found) 

Убедитесь, что у вас есть какой-то маршрут по умолчанию, или вы будете получать эти ошибки все время. Обычно это делается путем добавления кетчупа всего маршрута в самом конце вашего routes.rb:

map.default '/*path', :controller => 'default', :action => 'show' 

После этого вы можете делать все, что вы хотите с этим запросом.

+0

Спасибо, очень полезно! – Victor

6

Создать кетчуп все маршрут в нижней части config/routes.rb:

map.connect '*path', :controller => 'unknown_route' 

Тогда в app/controllers/unknown_route_controller вы можете сделать:

class UnknownRouteController < ApplicationController 
    def index  
    render :file => "#{Rails.root}/public/404.html", :layout => false, 
      :status => 404 
    end 
end 

Это сделает вашу страницу 404 для любых неизвестных маршрутов.

Смежные вопросы