(Вот моя необходимая строка о том, что я новичок в ruby/rails и программировании в целом, а также первый вопрос SO)
У меня есть задача rake, чтобы заполнить мою БД MySQL из 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
определяются как поля даты (и также отделены от/не связаны с полями rails created_at и updated_at), но я предполагаю, что файлы 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, но это, похоже, влияет только на отображение даты и не влияет на создание объектов с помощью моей задачи rake. После поиска вокруг SO и других ресурсов я попробовал
:created => row[1].strftime,
и
:created => row[1].strptime,
но получил undefined method strptime/strftime for "Created Date":String
(Дата создания - это имя столбца в CSV).
Так я тоже пробовал
:created => row[1].to_date
изменить (предположительно) строку «дата» в CSV на дату, но получить ошибку undefined method '<' for nil:NilClass
Изменение поля даты в CSV кажется невозможным, поскольку существует более 1 миллиона записей.
Как я могу отредактировать эту задачу rake, чтобы правильно заполнить мою базу данных из этого CSV? Или я должен изменить :created с даты на строку и манипулировать ею в логике приложения?