質問

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のドキュメントでは完全に明確になっていませんでした。

役に立ちましたか?

解決

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

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 をお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top