我正在尝试在此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
答案 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
..