rails postgres insert

我正在尝试按照Jonaphin给出的示例从csv文件导入数据,url为http://www.genesx.com/2012/06/import-csv-files-100x-faster-in-rails-3/

我试图从postgres获取最后一个插入的索引,但由于某种原因代码不起作用。

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?

 INSERT INTO bookings (survey_id, #{sql_keys.join(', ')}, created_at, updated_at) VALUES (#{survey_id}, #{sql_vals.join(', ')}, '#{created_at}', '#{created_at}') returning survey_id