RoRからCSV書き出しを試す
Rails (ruby)でCSVファイル書き出しは遅いらしい。大量のデータを書き出すには、SQL書くのがベター、でも、データ量が少なければ、そんなの関係ねぇ。
FasterCSVなるモジュールが早くて良いらしいが、私はmasuidrive on railsを参考にして、というか、殆どそのままパクッて、標準のCSVモジュールで実現した。
ApplicationController の先頭で
require 'csv'
して、CSV書き出しメソッドを追加する。
def csv report = '' CSV::Writer.generate(report, ',') do |csv| csv < < ['項目1', '項目2', '項目3'] Mydata.find(:all).each do |mydatas| csv << [mydatas.field1, mydatas.field2, mydatas.field3] end end send_data(NKF.nkf('-U -s -Lw', report), :type => ‘text/csv; charset=shift_jis; header=present’, :filename => “report-#{Time.now.strftime(’%Y%m%d’)}.csv\") end
後はこれを view から呼び出してやれば良い。
< %= link_to 'CSV出力', :action => ‘csv’ %>
Mydata.find(:all) に、抽出条件やソートオーダーを足してもいい。
NKFを通しているおかげで、UTF-8のデータがWindowsでも文字化けなしに表示できた。Yuichiro MASUIさん、ありがとう。
娘の誕生祝い。
タダシヤナギのガトーショコラ。美味しかったぁ。
TrackBacks
TrackBack URL : http://www.kestrel.jp/modules/wordpress/wp-trackback.php/107
この投稿には、まだコメントが付いていません
コメント
_CM_NOTICE