web-dev-qa-db-ja.com

Ruby on Rails)でCSVファイルをダウンロードする方法

私のInvoicesControllerにはこれがあります:

def index
  @invoices = current_user.invoices
  respond_to do |format|
    format.html
    format.xls
    format.csv # not working!
  end
end

私のindex.html.erb表示次の2つのダウンロードリンクがあります。

<%= link_to "Download as Excel", invoices_path(:format => "xsl") %>
<%= link_to "Download as CSV", invoices_path(:format => "csv") %>

テンプレートindex.xsl.erbおよびindex.csv.erbも存在します。

最初のリンクは機能します。つまり、Excelファイルがユーザーのコンピューターにダウンロードされます。ただし、CSVファイルはbrowserでレンダリングされ、ダウンロードされません。

ユーザーがCSVファイルもダウンロードできるようにするにはどうすればよいですか?

助けてくれてありがとう。

19
Tintin81

適切なコンテンツヘッダーを指定してみてくださいandindex.csv.erbハンドラブロックでformat.csvテンプレートを明示的にレンダリングします。

# app/controllers/invoices_controller.rb
format.csv do
    response.headers['Content-Type'] = 'text/csv'
    response.headers['Content-Disposition'] = 'attachment; filename=invoice.csv'    
    render :template => "path/to/index.csv.erb"
end
18
zeantsoi

これを試して

format.csv do
  response.headers["Content-Type"] = "text/csv; charset=UTF-8; header=present"
  response.headers["Content-Disposition"] = "attachment; filename=invoices.csv"
end
3
usha

最近発見した

render_csv

多分これをチェックしてください railscast (そうです)

2
deepfritz