1

Jonaphin がhttp://www.genesx.com/2012/06/import-csv-files-100x-faster-in-rails-3/で示した例に従って、csv ファイルからデータをインポートしようとしています。

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 を返せるようにするために変更する必要がある設定はありますか?

4

1 に答える 1

1
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
于 2012-10-17T19:26:47.553 に答える