#ruby-on-rails
#ruby-on-rails
Вопрос:
Возможно ли отображать разные страницы ошибок в зависимости от контроллера?
Ответ №1:
Для Rails < 3.0.
Да, это возможно. Я использую этот метод в своем контроллере приложения для отображения сообщения 404:
def render_optional_error_file(status_code)
status = interpret_status(status_code)[0,3]
if status == "404"
render :template => "/errors/404.html.erb", :status => status
else
render :template => "/errors/error.html.erb", :status => status
end
end
Итак, единственное, что вам нужно сделать, это написать этот метод для каждого контроллера, или вы можете изменить render
строку на что-то вроде этого:
render :template => error_page, :status => status
и добавить метод:
def error_page
"/errors/404.html.erb"
end
Тогда вам нужно только написать error_page
метод в каждом контроллере, где вы хотите изменить страницу ошибки по умолчанию.
РЕДАКТИРОВАТЬ: Ups, я только что заметил, что этот метод устарел в Rails 3. Итак, должен быть другой способ сделать это.
Для Rails > = 3.0:
Вот один пример решения для этого. Просто добавьте:
rescue_from ActionController::RoutingError, :with => :render_404
и добавить render_404
метод:
def render_404
render :file => "errors/404.html.erb", :status => 404
end
Или, если вы хотите добавить 404.html.erb
представление для каждого контроллера без изменения кода контроллеров, вы можете написать это следующим образом:
def render_404
render "404.html.erb", :status => 404
end
Я думаю, что следует искать этот файл ошибки внутри каталога просмотра текущего контроллера. Я не проверял это, но я думаю, что это должно сработать. Но не забудьте включить 404.html.erb
файл в каталог просмотра каждого контроллера. В противном случае может возникнуть ошибка.
Комментарии:
1. Спасибо. Поэтому я должен дублировать его в каждом контроллере. Я нашел метод, который работает в Rails 3: blog.igodigital.com/blog /…