2

最近、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 を行っているのは奇妙に思えます。そもそも間違っている?

4

0 に答える 0