我正在生成可变数量记录的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
答案 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
我希望代码有效..无法测试..但你明白了