Railsの組み込みのcsvライブラリを使用して、Railsアプリケーションからデータセットをcsvファイルとしてエクスポートするのが好きです。通常、csvファイルは、以下の例のように行ごとに書き込まれます。これは、datasets_controller.rbから取得されます。
require 'csv'
dataset = Dataset.find(6)
dataset_headers = dataset.datacolumns.collect { |dc| dc.columnheader }
csv_file = CSV.generate do |csv|
csv << dataset_headers
end
そして今、私の質問は、私のcsvファイルをこのように列ごとに書くことができるかどうかです。
require 'csv'
dataset_columns = Datacolumn.all(:conditions => ["dataset_id = ?", 6], :order => "columnnr ASC").uniq
csv_file = CSV.generate do |csv|
csv << "here put one after another all my data columns"
end
編集:
ダグラスの提案に基づいて、私は以下のコールドを思いついた。
data_columns=Datacolumn.all(:conditions => ["dataset_id = ?", dataset.id], :order => "columnnr ASC").uniq
CSV.generate do |csv|
value=Array.new
data_columns.each do |dc|
value << dc.columnheader
dc.sheetcells.each do |sc|
if sc.datatype && sc.datatype.is_category? && sc.category
value << sc.category.short
elsif sc.datatype && sc.datatype.name.match(/^date/) && sc.accepted_value
value << sc.accepted_value.to_date.to_s
elsif sc.accepted_value
value << sc.accepted_value
else
value << sc.import_value
end
end
csv << value
value = Array.new
end
end
この場合、出力は転置されず、次のようになります。
height,10,2,<1,na
fullauthor,Fortune,(Siebold & Zucc.) Kuntze,Fortune,(Siebold & Zucc.) Kuntze
Year,1850,1891,1850,1891
fullname,Mahonia bealei,Toxicodendron sylvestre,Mahonia bealei,Toxicodendron sylvestre
しかし、csvを書き込む行を変更すると
csv << value.transpose
文字列を配列に変換できなかったことを示すエラーが表示されます。誰かこれを修正する方法のアイデア?
これに関する助けをいただければ幸いです。
最高のクラース