(Ето моята необходима линия за това, че съм нов в ruby/rails и програмирането като цяло; първият SO въпрос също)
Имам рейк задача да заредя моята 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
се дефинират като полета за дата (и също са отделни от/не са свързани с полетата 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, но това изглежда засяга само показването на дата и няма ефект върху създаването на обекти чрез моята рейк задача. След като потърсих около 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? Или трябва да променя :created от дата на низ и да го манипулирам в логиката на приложението?