2

我正在尝试按照本教程将 CSV 文件导入我的 rails 数据库(SQLite 开发中) 。数据实际上被插入到我的数据库中,但它似乎只插入了 CSV 文件中的第一条记录。耙子似乎运行没有问题。并且使用 --trace 运行它不会显示任何其他信息。

require 'csv'
desc "Import Voters from CSV File"
task :import => [:environment] do

  file = "db/GOTV.csv"

  CSV.foreach(file, :headers  => false) do |row|
    Voter.create({
      :last_name              => row[0], 
      :first_name             => row[1],
      :middle_name            => row[2],
      :name_suffix            => row[3],
      :primary_address        => row[4],
      :primary_city           => row[5],
      :primary_state          => row[6],
      :primary_zip            => row[7],
      :primary_zip4           => row[8],
      :primary_unit           => row[9],
      :primary_unit_number    => row[10],
      :phone_number           => row[11],
      :phone_code             => row[12],
      :gender                 => row[13],
      :party_code             => row[14],
      :voter_score            => row[15],
      :congressional_district => row[16],
      :house_district         => row[17],
      :senate_district        => row[18],
      :county_name            => row[19],
      :voter_key              => row[20],
      :household_id           => row[21],
      :client_id              => row[22],
      :state_voter_id         => row[23]
      })
  end
end
4

1 回答 1

0

刚刚也遇到了这个问题 - 猜你以其他方式解决了它,但仍然可能对其他人有用。

就我而言,问题似乎是 CSV 库中的不兼容更改。

我猜你使用的是 Ruby 1.8,其中

CSV.foreach(path, rs = nil, &block)

这里的文档严重缺乏,实际上根本没有文档,所以必须从源代码中猜测:http ://ruby-doc.org/stdlib-1.8.7/libdoc/csv/rdoc/CSV.html#method-c- foreach .. 无论如何,'rs' 显然不是选项哈希,它看起来像记录分隔符。

在 Ruby 1.9 这更好:http ://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html#method-c-foreach

self.foreach(path, options = Hash.new, &block)

所以这是支持诸如:headers..

于 2013-05-15T16:37:27.880 回答