Макет FasterCSV

Мне нужно разместить CSV в столбцах, а не в строках. Поэтому спускаемся по таблице, а не поперек. Например:

Заголовок 1, значение 1.1, значение 2.1
Заголовок 2, значение 1.2, значение 2.2
Заголовок 3, значение 1.3, значение 2.3

Кто-нибудь знает как это сделать? Я просмотрел документацию и не могу найти ничего об изменении макета на столбцы.

РЕДАКТИРОВАТЬ:

row_data = [];
csv_string = FasterCSV.generate do |csv|
  # header row
  row_data << ["id", "Name", "Age"]

  # data rows
  Playerapplication.find_each do |player|
    row_data << [player.id, player.name, player.age]
  end

  row_data.transpose
  csv << row_data
end

# send it to the browser
send_data csv_string,
          :type => 'text/csv; charset=iso-8859-1; header=present',
          :disposition => "attachment; filename=players_application.csv"

person Peter    schedule 06.02.2011    source источник


Ответы (1)


Просто используйте Array#transpose для своих данных перед записью в CSV.

Если вы измените свой код следующим образом:

row_data = [];
csv_string = FasterCSV.generate do |csv|
  # header row
  row_data << ["id", "Name", "Age"]

  # data rows
  Playerapplication.find_each do |player|
    row_data << [player.id, player.name, player.age]
  end

  row_data.transpose.each do |row|
    csv << row
  end
end

меня устраивает.

person Jakub Hampl    schedule 06.02.2011
comment
Выполнение транспонирования не разделяет значения на новый столбец/строку. Каждая новая запись объединяется в новый столбец. Так это выглядит вдоль одной строки. Заголовок1Заголовок2Заголовок3, значение1.1значение1.2значение1.3, значение2.1значение2.2значение2.3. Я обновил свой пост своим кодом. Вы видите что-то не так? - person Peter; 06.02.2011
comment
@Peter Я изменил ответ, внеся в ваш код простое изменение. - person Jakub Hampl; 06.02.2011
comment
@Ian Да transpose - это стандартный рубиновый метод. - person Jakub Hampl; 20.08.2011