このrailscastビデオをフォローしていましたが、データを Excel (またはこの件については CSV) にエクスポートするのに深刻な問題があります。
フロントエンドで次のように表示する一部のデータで will_paginate を使用しています。
sql = "select complex..."
@data = paginate_by_sql([sql],
:per_page => params[:rows],
:page => params[:page])
そのままで、これはうまくいくはずだと思いました:
respond_to do |format|
format.html
format.xls { send_data @data.to_csv(:col_sep => "\t") }
end
実際にはコンテンツによってxlsファイルが正しくダウンロードされ、すべてが台無しになり、列ごとに1行が表示され、コンテンツとして次のようなものが表示されます。
#<Product:0x00000004c83328>
PS -> レールの最新バージョンを使用
::編集::列ごとに1行とは、Excelシートとこの行にのみ1行を意味します
列 A =#<Product:0x00000004c83328>
列 B =#<Product:0x00000004c83329>
列 C = #<Product:0x00000004c8333>
(30 列)
アップデート
テストのための簡単な演習を行い、すべての列を 1 つの列だけに戻します。
csv_string = CSV.generate(:col_sep => ",") do |csv|
csv << ["row", "of", "CSV", "data"]
csv << ["another", "row"]
end
respond_to do |format|
format.html
format.csv { send_data csv_string,
:type => 'text/csv; charset=iso-8859-1; header=present',
:disposition => "attachment; filename=records.csv" }
end
(:col_sep => ",")
オプションだと思います。
結果: