1

ajaxから、コントローラーでエクスポートアクションを呼び出します

def export

    data_filtered = eval(params[:data_filtered][9..-2])
    CSV.open("data.csv", "wb") do |csv|
        csv << data_filtered.first.keys
        data_filtered.each do |hash|
            csv << hash.values
        end
     end
 end

現在、これは確かに私のコンピューターに data.csv というファイルを作成しますが、実際に作成したという証拠はありません。ファイルがブラウザによってダウンロードされ、ブラウザのダウンロードとダウンロードフォルダに表示されるようにします。

編集:

def export
  data_filtered = eval(params[:data_filtered][9..-2])

  csv_file = CSV.generate({}) do |csv|
  csv << data_filtered.first.keys
  data_filtered.each do |hash|
    csv << hash.values
  end
end
send_data csv_file, :type => 'text/csv; charset=iso-8859-1; header=present', :disposition => "attachment; filename=tester1.csv"

終わり

4

2 に答える 2

0

結果のファイルに対してブラウザーが何をすべきかを示すヘッダーを設定する必要があります。

send_data file, :type => 'text/csv; charset=iso-8859-1; header=present', :disposition => "attachment;data=#{csv_file}.csv"

ただし、最初にサーバーに書き込んでからダウンロードする必要があります。この回答が役立つ場合があります: Ruby 1.9.2 export a CSV string without generated a file

于 2013-07-02T14:58:02.310 に答える
0

コントローラー メソッドから応答を返していないようです。そのため、ブラウザーで何も起きていません。CSVを処理しているだけです。

ダウンロード可能なエンティティに応答を返すには、データの形式 (バイナリとファイル) に応じてsend_dataまたはsend_fileを使用する方法があります。

どちらも基本的に同じことを行います。指定したデータ、データ型、およびダウンロード可能なファイル名を指定できます。render 呼び出しと同じように、応答として返すことができます。

それが役立つことを願っています!

于 2013-07-02T14:59:20.510 に答える