2008-09-29 6 views
3

RubyでWeb開発したAWDRの本を読んでいましたが、古いコードの問題の1つはrespond_toを使用してビューを確認した使用されるjavascriptのビューです。今更新されたいくつかの例では、後で人々が優雅な劣化を実装するとき、request.xhrを使用すると言いました。ユーザーがJavaScriptを有効にしているかどうかを確認し、そうでない場合はユーザーをリダイレクトします。RoR 2.xでajaxを使用して正常に機能するためにrespond_toを使用する

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のドキュメントは完全にわかりませんでした。

答えて

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?は、(それが「XMLHttpRequestを」が含まれているかどうかを確認するために)要求のX-Requested-Withヘッダを見ます。 respond_toは、受け入れられたMIMEタイプを調べます。

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

しかし、あなたはあなたのAJAX呼び出しがそのヘッダを(プロトタイプがこれを自動的に行います)に設定されていない限り、優雅なdegredationためxhr?を使用することはできません

さらに、respond_toは、同じブロックからのものであればどんなものであれxml、json、jsを送信するより柔軟性があります。

ここではrespond_toをお勧めします。

関連する問題