2011-08-14 8 views
4

私はrespond_to format.jsというコントローラを持っていますが、ほとんどのリクエストは古いformat.htmlが存在し、404例外をスローしたとみなします。コントローラ上のすべてのMIMEリクエストをキャプチャし、format.jsにのみリダイレクトするにはどうすればよいですか?respond_to onlyすべてのMIMEタイプに対してformat.js

は、ここで私はこの、(私はこれは単なるデモンストレーションのために、無効である知っている)のような何かをやろうとしている現在のコントローラのアクション

def search 
    respond_to do |format| 
    unless @search.nil? 
     format.js { render :partial => '/search/search_form', :status => 200 } 
    else 
     format.js { render :partial => '/search/not_exist', :status => 500 } 
    end 
    end 
end 

です。

def search 
    respond_to(:html) do |format| 
    unless @search.nil? 
     format.js { render :partial => '/search/search_form', :status => 200 } 
    else 
     format.js { render :partial => '/search/not_exist', :status => 500 } 
    end 
    end 
end 
+0

format.all {...}の問題は何ですか? – tokland

答えて

3

すべての要求はただ全体respond_to構造を取り出し、JSすべきか:

def search 
    unless @search.nil? 
    render :partial => '/search/search_form', :status => 200 
    else 
    render :partial => '/search/not_exist', :status => 422 
    end 
end 

(注意:提出とセマンティックな問題を示すために、422処理不能エンティティへの変更を500は、通常は予約されています。サーバーエラーの場合、スタックダンプなど)

2

format.htmlに永続的なリダイレクトを接続し、必要な形式でコントローラにループバックすることができます。これは、あなたがリダイレクトような方法、と言う、あなたは複数の入力フォーマットを有することができるAtomフィードまたは何かにRSSフィードが、あなたが使用しているものは何でもパスでpath_back_hereを交換するだけで一つの出力フォーマット

respond_to do |format| 
... 
format.js { do whatever } 
... 
format.html { redirect_to path_back_here(:format => :js) } 

(のsearch_pathです?)

関連する問題