(Вот моя необходимая строка о том, чтобы быть новичком в ruby / rails и программировании в целом; также первый вопрос SO)
У меня есть задача rake, чтобы заполнить мою MySQL DB из CSV-
...
CSV.read(uri).each do |row|
Incident.create(
:building_address => row[9],
:agency => row[3],
:complaint_type => row[6],
:descriptor => row[5],
:created => row[1],
:closed => row[2],
)
end
:created
и :closed
определены как поля даты (и также не связаны с полями созданного рельса и не связаны с рельсами), но я предполагаю, что файлы CSV распознают только строки.
Когда я запускаю это задание, день и месяц меняются местами.Таким образом, 1/12/2010 12:00:00 AM
в CSV (что для CSV и меня в США означает 12 января) в конечном итоге анализируется как 2010-12-1, и любой день после 12 возвращает ноль, поэтому 1/20/2010 12:00:00 AM
приводит к пустой записи вмоя БД.
Я добавил
date:
formats:
default: "%m/%d/%Y"
в свой en.yml, но это, похоже, влияет только на отображение даты и не влияет на создание объектов через мои граблизадача.После поиска по SO и другим ресурсам я попытался
:created => row[1].strftime,
и
:created => row[1].strptime,
, но получил undefined method strptime/strftime for "Created Date":String
(Дата создания - это имя столбца в CSV).
Поэтому я также попытался
:created => row[1].to_date
изменить (предположительно) строку «date» в CSV на дату, но получил ошибку undefined method '<' for nil:NilClass
Изменениеполе даты в CSV кажется незапускаемым, так как существует более 1 миллиона записей.
Как я могу отредактировать эту задачу с граблями, чтобы правильно заполнить мою базу данных из этого CSV?Или я должен изменить: созданный из даты в строку и манипулировать им в логике приложения?