404 пользовательских страниц ошибок в Rails 2.3 - PullRequest
2 голосов
/ 29 июня 2011

Я переопределяю файл render_optional_error_file для рендеринга пользовательской страницы при возникновении ошибки. Это прекрасно работает, если в приложении есть ошибка, без проблем отображается файл «shared / error.erb».

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

Однако, когда отображается страница 404 для файла, ни один из этих фильтров не запускается, поэтому я получаю черную страницу без меню. Есть ли способ, которым я могу запустить их? И есть ли причины, по которым я не должен этого делать?

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Когда Rails обнаруживает отсутствующий файл, он запускает render_optional_error_file (404) со статусом 404 на контроллере приложения, но пропускает все фильтры, предположительно, так как ошибка уже произошла.

Я добавил метод run_filters длямой контроллер приложения, а затем вызовите его из файла render_optional_error_file:

def run_filters
  #run filters or whatever
end

def render_optional_error_file(status)
  run_filters
  render "shared/error", :status => status 
end

Вы также можете проверить это поведение на своем сервере разработки, включив в свой контроллер приложений следующее:

alias_method :rescue_action_locally, :rescue_action_in_public
0 голосов
/ 29 июня 2011

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

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

...