Ложный формат ответа с помощью кнопок возврата или перезагрузки в IE
Недавно я столкнулся с проблемой в IE и другом браузере, которую я также заметил на railscasts.com некоторое время назад.
Например, загрузка страницы:
- railscasts.com/episodes/some_id#comments
загрузит эпизод Railscasts с активированной вкладкой комментариев. переход на "похожую" вкладку изменит URL на:
- railscasts.com/episodes/some_id#similar
если бы я нажал на кнопку возврата или (IE) перезагрузки, я бы увидел представление json для комментариев.
Копаясь в файле журнала я нашел это:
Хром:
- EpisodesController # показать как HTML
- EpisodesController # показать как HTML
IE
- EpisodesController # показать как HTML
- EpisodesController # показать как */*
в связанном вопросе stackru было предложено изменить порядок respond_to
заблокировать и сделать первый ответный блок "HTML"
respond_to do |format|
format.html
format.json
end
Это означает, что если формат ответа не указан, то для ответа потребуется первый. не сухое решение проблемы. также не возможно, если вы используете respond_with(@episodes)
Другое решение - установить формат ответа по умолчанию в routs.rb:
match 'episodes/:id' => 'episodes#show', :defaults => { :format => 'html' }
что также не СУХОЕ, потому что вы не хотите писать это для каждого определенного вами маршрута.
Наконец, я нашел предложение использовать before_filter в контроллере приложения:
before_filter :set_default_response_format
protected
def set_default_response_format
request.format = "html" if request.format == "*/*" && request.content_type.nil?
end
что кажется стабильным решением этой проблемы.
Кажется странным, что не больше программистов сталкиваются с этой проблемой, или я делаю что-то еще. неправильно во-первых?