Ложный формат ответа с помощью кнопок возврата или перезагрузки в 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

что кажется стабильным решением этой проблемы.

Кажется странным, что не больше программистов сталкиваются с этой проблемой, или я делаю что-то еще. неправильно во-первых?

0 ответов

Другие вопросы по тегам