rake import-仅从csv向数据库添加一行

时间:2012-10-29 00:37:18

标签: ruby ruby-on-rails-3.2

我正在尝试在此tutorial之后将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

1 个答案:

答案 0 :(得分: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 ..

等选项的那个