Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby rake导入-仅将csv中的一行添加到数据库_Ruby_Ruby On Rails 3.2 - Fatal编程技术网

Ruby rake导入-仅将csv中的一行添加到数据库

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

我正在尝试将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

我也遇到了这个问题——我猜你用其他方法解决了这个问题,但对其他人可能还是有用的

在我的例子中,问题似乎是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)