1
我想在http://www.genesx.com/2012/06/import-csv-files-100x-faster-in-rails-3/軌Postgres的插入
我想從Postgres的最後插入的指數繼Jonaphin給出的示例CSV文件導入數據,但由於某些原因的代碼不工作。
def process_data!(file, survey_id)
headers = [
"zip_code",
"booking_date"
]
ActiveRecord::Base.establish_connection
created_at = Time.now.strftime("%Y-%m-%d %H:%M:%S")
CSV.foreach(file, {headers: :first_row}) do |row|
sql_keys = []
sql_vals = []
headers.each_with_index do |key, idx|
val = row[idx]
sql_keys << key
sql_vals << ActiveRecord::Base.connection.quote(val)
end
sql = "
INSERT INTO bookings (survey_id, #{sql_keys.join(', ')}, created_at, updated_at)
VALUES (#{survey_id}, #{sql_vals.join(', ')}, '#{created_at}', '#{created_at}')
"
booking_id = ActiveRecord::Base.connection.insert(sql)
end
end
booking_id
現在應該有最後插入行的ID,但由於某種原因,它是nil
。
我試着在控制檯中運行ActiveRecord::Base.connection.insert(sql)
,它工作正常(即它返回了我想要的ID)。
有人知道這裏發生了什麼問題嗎?是否有一些設置需要更改以允許postgres返回最後一個ID?
這很好用 - 謝謝! (雖然應該是「返回ID」) – cit
我一直在使用類似的方法,但在Rails 4.1中,ActiveRecord :: Base.connection已被棄用,並且在SQL語句中使用'RETURNING id'時會引發錯誤。 – bayendor