在CSV导出中容纳可变数量的字段

时间:2012-01-11 08:19:07

标签: ruby-on-rails ruby csv export

我正在生成可变数量记录的CSV导出(在ruby中,来自rails)。每个记录导出的字段数取决于每本书的作者数量。这是不理想的,因为用户将在Excel中查看此CSV,并期望在列中一致地显示数据。如果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 个答案:

答案 0 :(得分:1)

更新:愚蠢的我误解了这个问题。

我会简单地延迟写标题一段时间。 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

我希望代码有效..无法测试..但你明白了