remote: true
オプションを使用して、単一のフォームを持つ非常に単純な単一ページのRailsアプリケーションを構築しています。基本的には、このフォームでいくつかのオプションを選択し、create.js.erb
ビューを使用して、これらの要件に一致する一連の製品をページにレンダリングします。ここまでは順調ですね。Railsフォームで `remote:true`を指定してCSVファイルをダウンロードすることはできますか?
私はまた、ユーザーに製品のCSVリストをダウンロードするオプションを提供したいと思います。問題は、remote: true
オプションでは、実際にダウンロードを開始する方法を理解できないということです。私は、正しいフォーマットとアクションにルーティングするハックhereを使用することができます。これは、ほとんどの作品
<%= button_tag('Download CSV', :value => 'csv', :name => 'format') %>
def create
respond_to do |format|
format.js
format.csv { send_data @products.to_csv }
end
end
。 「Download CSV」ボタンをクリックすると、ブラウザのレスポンスに正しいCSV(テキスト)データが返されますが、AJAXレスポンスで返されるため、レンダリングされず、ファイルのダウンロードが発生しません。
は、私がリンクを使用してではなく、フォームを送信することによって、この作品を作ることができる(アクションと仮定して「GET」に応答):
<%= link_to 'Download CSV', products_path(format: :csv) %>
をしかし、私は約ユーザーデータへのアクセスを持っていませんフォームのパラメータでキャプチャされた製品要件
この作業を行う方法はありますか、remote: true
を失い、HTML(非AJAX)経由でフォームを送信してCSVダウンロードを開始する必要がありますか?
これまでにこれを理解できましたか? –
いいえ、私は 'value: 'csv'、name: 'format''ハックを使っています(コントローラーで' send_data'を使っています)。それは十分にうまくいくが、依然として匂いがする。 – Sasgorilla
レンダリングされた 'js.erb'部分に' button_to'として 'Download CSV'を追加しました。 –