2012-01-11 8 views
0

可変数のレコードのCSVエクスポート(ルビーで、レールから)を作成しています。レコードごとにエクスポートされるフィールドの数は、各書籍の著者数によって異なります。これは理想的ではありません。ユーザーがこのCSVをExcelなどで見て、データが列内に一貫して表示されることを期待しているからです。CSVエクスポートで可変フィールド数を調整する

# header-row for the data 
csv << ["column heading 1", "column heading 2", "column heading 3" #etc] 

Book.all do |book| 
    row_data = book.id 
    row_data << book.some_other_field # etc 
    book.authors.each do |author| 
    row_data << author.first.name 
    #etc 

答えて

1

アップデート:私は列の数を設定するにはどうすればよいのcsvビルダーの構造は、このようなものであることを考えると、ブロックが繰り返します回数の合計数であるように愚かな私は、質問を読み違えます。

私はしばらくの間、ヘッダーの書き込みを単に延期します。 Rubyがファイルに能力にプリ保留データを持っています Prepend a single line to file with Ruby

あなたは自分の著者の最大長を持ち歩く必要があります。

max_authors = 0  
Book.all do |book| 
    row_data = book.id 
    row_data << book.some_other_field # etc 
    if book.authors.count > max_authors 
    max_authors = book.authors.count 
    end 
    book.authors.each do |author| 
    row_data << author.first.name 
    #etc 

# header-row for the data 
a = (0..max_authors).collect { |n| "column heading #{n}" } 
csv << a.join(",") #obviously this has to be prepended 

私はコードが動作願っています。..ことができませんでしたそれをテスト..しかし、あなたはアイデアを得る

+0

ハ、私は決してそれを考えなかった!優れた。 – snowangel

関連する問題