最近、IE やその他のブラウザーで問題が発生しました。これは、少し前に railscasts.com でも気付きました。
たとえば、ページをロードします。
- railscasts.com/episodes/some_id#comments
コメントタブがアクティブになっているレールキャストエピソードをロードします。「類似」タブに移動すると、URL が次のように変更されます。
- railscasts.com/episodes/some_id#similar
戻るボタンまたは (IE) リロード ボタンをクリックすると、コメントの json 表現が表示されます。
ログファイルを掘り下げると、次のことがわかりました。
クロム:
- EpisodesController#HTML として表示
- EpisodesController#HTML として表示
IE
- EpisodesController#HTML として表示
- EpisodesController#show as */*
関連するstackoverflowの質問では、注文respond_to
ブロックを変更して最初の応答ブロックを「html」にする ことが提案されました
respond_to do |format|
format.html
format.json
end
つまり、応答形式が指定されていない場合、最初に応答する形式が必要になります。問題の DRY ソリューションではありません。また、使用している場合はおそらくそうではありませんrespond_with(@episodes)
別の解決策は、routes.rb でデフォルトの応答形式を設定することです。
match 'episodes/:id' => 'episodes#show', :defaults => { :format => 'html' }
定義するすべてのルートに対してそれを書きたくないので、これも DRY ではありません。
最後に、アプリケーション コントローラーで 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
これは、その問題の安定した解決策のようです。
その問題に遭遇するプログラマーが増えていない、または私が sth を行っているのは奇妙に思えます。そもそも間違っている?