19

これは単純なはずですが、まっすぐな答えが見つからないようです。

csv MIME タイプを追加しました。ダウンロードしたファイルの名前が常に「report.csv」であることを除いて、次のように動作するようです。

私のコントローラーで:

def report
  respond_to do |format|
    format.html
    format.csv do
      render :template => "summary/report.csv.erb",
             :filename => "foo" #doesn't work
    end
  end
end

デフォルトのレンダラーを使用していると思いますが (別のレンダラーは実装していません)、利用可能なオプションに関する完全なドキュメントが見つからないようです。

「ファイル名」オプションのようなものか、使用できるものはありませんか? より良いアプローチはありますか?

4

3 に答える 3

38

this answerの助けのおかげで、私はそれを手に入れました。

format.csv do
  response.headers['Content-Disposition'] = 'attachment; filename="' + filename + '.csv"'
  render "summary/report.csv.erb"
end

最初に応答ヘッダーにファイル名を設定し、次に を呼び出しますrender

(テンプレートのパラメーターrenderはオプションですが、私の場合は必要でした。)

于 2012-10-15T19:50:54.793 に答える
4

または、send_data と render_to_string の組み合わせを使用することもできます (CSV テンプレートがあるため)。

def report
  respond_to do |format|
    format.html
    format.csv do
      send_data render_to_string(:template => "summary/report.csv.erb"),
             :filename => "foo"
    end
  end
end
于 2014-05-06T10:24:50.767 に答える