3

Ruby on Rails を使用した Web 開発に関する AWDR の本を読んでいましたが、古いコードの問題の 1 つは、使用されるビューが JavaScript ビューであることを確認するために、respond_to を使用しなかったことです。現在、いくつかの更新された例で、グレースフル デグラデーションを実装するときに、request.xhr を使用する場合に、人々が後で言及するのを見てきました。ユーザーがJavaScriptを有効にしているかどうかを確認し、そうでない場合はユーザーをリダイレクトします。

私は、respond_to を使用して同じ動作を得ることができるかどうか疑問に思っていました。

だから私がやろうと思っていることは次のようなものです:

def function
  respond_to do |format|
    format.js do
      basic_stuff
    end
    format.html do
      basic_stuff
      user_redirect
    end
  end
end

DRY 原則に違反しているように見えますが、ユーザーとサーバーがここでどのように対話しているかについて、おそらく何かが欠けています。正直なところ、API のドキュメントでは完全に理解できませんでした。

4

1 に答える 1

2

次のようにリファクタリングできます。

def function
  basic_stuff # executed regardless of the mime types accepted
  respond_to do |format|
    format.html do
      user_redirect
    end
  end
  # will fall back rendering the default view - which you should ensure will be js
end

request.xhr?リクエストのX-Requested-Withヘッダーを調べます(「XMLHttpRequest」が含まれているかどうかを確認します)。respond_to受け入れられた MIME タイプを調べます。

いずれかを使用して、ある種の適切な劣化を実装できます。

しかし、 ajax呼び出しがそのヘッダーを設定していない限り、適切な劣化に使用することはできませんxhr?(Prototypeはこれを自動的に行います)。

さらに、respond_to同じブロックからのものであっても、xml、json、js などを送信する柔軟性が向上します。

というわけで、ここをお勧めrespond_toします。

于 2008-09-29T17:47:20.077 に答える