Ruby rake导入-仅将csv中的一行添加到数据库
我正在尝试将CSV文件导入rails数据库(SQLite正在开发中)。数据实际上被插入到我的数据库中,但它似乎只插入CSV文件中的第一条记录。耙子似乎没有问题。并且,使用--trace运行它不会显示任何附加信息Ruby rake导入-仅将csv中的一行添加到数据库,ruby,ruby-on-rails-3.2,Ruby,Ruby On Rails 3.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 =&g
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
我也遇到了这个问题——我猜你用其他方法解决了这个问题,但对其他人可能还是有用的 在我的例子中,问题似乎是CSV库中的不兼容更改 我猜你用的是Ruby 1.8,在哪里
CSV.foreach(path, rs = nil, &block)
这里的文档严重缺乏,实际上根本没有文档,所以不得不从来源猜测:。。
无论如何,“rs”显然不是选项散列,它看起来像记录分隔符
在Ruby 1.9中,这是更好的:
因此,这是一个支持选项的文件,例如
:headers
。您检查了foreach是否正确地遍历了文件的所有行?我的意思是,问题可能是它在第一行之后停止迭代,或者它遍历了所有行,但只以某种方式保存了第一行,所以您可以检查第一行我是否已尝试放置行[0]要将其注销到控制台,但它会抛出和未定义的方法错误。这可能是p
或put
而不是put
是的,foreach只命中第一条记录,然后停止SSO这可能是因为行尾(EOL)字符
self.foreach(path, options = Hash.new, &block)