2012-03-07 7 views
5

現在のレールアプリでは、ajax uploaderライブラリを使用しています.json {success:true}で応答する必要があり、ファイルが正常にアップロードされたことを示しています。Rails JSレスポンスは、ステータスとテンプレートの両方を表示しますか?

私のアプリでは、ファイルはイメージで、アップロード後にこれをページに追加します。これは私が持っているかであるような何か言うかもしれないcreate.js.erbような私のJS応答が適切なテンプレートをレンダリングするでしょう上の例で

respond_to do |format| 
    format.html { redirect_to @resource, :notice => 'Created.' } 
    format.js 
end 

、...

$('#resources').append('<%= escape_javascript(render '@resource') %>'); 

:通常、私のような何かをするだろう過去にAjaxのコメントなどをしていました。さて、私のrespond_toブロックを作業アップローダーを取得するには、現在、この処理を行います。

format.js { render :json => { :success => true } } 

これはアップローダー作業を行いますが、私はページにレンダリングされたパーシャルを追加し、私は通常、Ajaxのレスポンスの場合と同様に排除するように思えます。

私の質問は、両方を達成する方法はありますか?そうでなければ、レンダリングされたオブジェクトが正常に作成された後、そのページにどのようにポピュレートしますか?

答えて

3

コントローラから直接またはビューテンプレートを使用することはできません。 AJAXアップローダはJSONとして解析できる応答を期待しているようですので、テンプレートを使用して他のレスポンスを追加すると(format.js { render :json => { :success => true }}を実行しないことになります)、応答本体としてJSONが返されません。

プラグインのsourceを見ると、onCompleteを実行してJSON応答を返すメソッドを定義できることがわかります。

これはテストされていませんが、あなたを近づけるはずです。だから、あなたのセットアップあなたのAJAXアップローダーは、コールバック

var uploader = new qq.FileUploader({ 
    element: document.getElementById('file-uploader'), 
    action: '/upload', 
    onComplete: function(id, fileName, responseJSON) { 
    $('#resources').append(responseJSON.partial); 
    } 
}); 
+0

このアイデアの作品を追加すると、ページ上のJavaScriptで次に

format.js do partial = render_to_string @resource render :json => { :success => true, :partial => partial } end 

のようなあなたのJSONレスポンスを拡張する場合。 'render_to_string'についてはわかりませんでしたが、テストでは、コールバックに' .getScript'を使って部分文字列を取得することもできました。あなたの方法はよりクリーンです。ありがとう! – Andrew

+0

メモ...デフォルトでは、 'escape_javascript'はコントローラには使用できません。それは' render:json'メソッドがとにかく行うため、不要です。 – Andrew

+0

クール、それは助けてうれしい。 'escape_javascript'はそこでは動作しません。私が何を考えているのか分かりません。答えに対するフィードバックありがとう – danivovich

関連する問題