Я запускаю rails 3.0.1 с ruby 1.9.2p290 и пытаюсь разобрать CSV-файл с помощью CSV (насколько я понимаю, CSV теперь использует более быстрый код CSV).
Я следил за хорошей записью о настройке этого для более быстрого CSV, и мне нужно было внести лишь незначительные изменения, чтобы заставить его работать (изменить требование на CSV вместо fastCSV и т. д.).
Я могу загрузить файл csv в таблицу с правильным количеством отсчитанных столбцов, но все это одна строка, независимо от того, сколько строк. Например, если бы в моем CSV-файле было три строки с тремя столбцами, моя таблица import_table отобразила бы номер столбца 0,1,2 три раза без увеличения номера строки. Таким образом, он распознает конец каждой строки моего CSV-файла, но не увеличивает счетчик строк. Что мне не хватает?
Мой csvcontroller выглядит так:
require 'csv'
class Admin::CsvController < ApplicationController
def import
end
def upload
table = ImportTable.new :original_path => params[:upload][:csv].original_filename,
:import_type => params[:type]
uploaded_file = params[:upload][:csv].read
CSV.parse(uploaded_file) do |cells|
row_index = 0
column_index = 0
cells.each do |cell|
table.import_cells.build :column_index => column_index, :row_index => row_index, :contents => cell
column_index += 1
end
row_index += 1
end
table.save
redirect_to import_table_path(table)
end
end
Я попытался использовать .readline вместо .read, но это открыло еще один шарик воска.
row_index = 0
должен быть вне цикла CSV.parse. хорошо, теперь все хорошо. Я отмечу это как ответ еще через 7 часов, когда мне будет разрешено это сделать. - person Aaron Thomas   schedule 06.10.2011