Размещение переменного количества полей в экспорте в CSV - PullRequest
0 голосов
/ 11 января 2012

Я делаю экспорт 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 Ответ

1 голос
/ 11 января 2012

Обновление: глупо, я неправильно понял вопрос.

Я бы просто отложил написание заголовка на некоторое время. В Ruby есть возможность предварительно ожидать данные в файл: Добавить одну строку к файлу с 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

Я надеюсь, что код работает .. Не могу проверить это .. но вы поняли идею

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...