Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 on rails 3 无法将CSV文件植入Rails应用程序_Ruby On Rails 3_Sqlite_Csv_Seed - Fatal编程技术网

Ruby on rails 3 无法将CSV文件植入Rails应用程序

Ruby on rails 3 无法将CSV文件植入Rails应用程序,ruby-on-rails-3,sqlite,csv,seed,Ruby On Rails 3,Sqlite,Csv,Seed,我正在尝试将大约2K条记录植入一个模型中,我已经尝试使用所有不同的方法(和)。我觉得这应该很简单。我已经把所有的数据都放在一个CSV文件中,我已经把模型设置好了,准备播种 到目前为止,唯一有效的方法就是在Railscapsts一集中所展示的内容。我为我的属性插入了这段代码,它只植入了第一行(2K中的第一行),就是这样: Country.delete_all open("#{Rails.root}/path_to_my_file") do |models| models.read.each_l

我正在尝试将大约2K条记录植入一个模型中,我已经尝试使用所有不同的方法(和)。我觉得这应该很简单。我已经把所有的数据都放在一个CSV文件中,我已经把模型设置好了,准备播种

到目前为止,唯一有效的方法就是在Railscapsts一集中所展示的内容。我为我的属性插入了这段代码,它只植入了第一行(2K中的第一行),就是这样:

Country.delete_all
open("#{Rails.root}/path_to_my_file") do |models|
  models.read.each_line do |model|
     column_1, column_2, column_3, column_4 = model.chomp.split(",")
     Model.create!(:attr_1 => column_1, :attr_2 => column_2, ...etc)
  end
end
然后基于其他一些问题,我尝试使用
FasterCSV
,但我收到了一系列错误,说
FasterCSV
已经包含在最新版本的ruby中,我似乎无法理解(这可能是我的错,但我还没有找到一个好的SO问题来很好地解释它)

最后,
Fast\u Seeder
似乎有一些潜力,它识别了我的所有条目,但没有将任何条目保存到模型中,因为我收到了以下错误:

SQLite3::SQLException:复合选择中的术语太多:(所有我的列)


总之,我觉得这应该足够简单。我只是有一个有2K个条目的CSV,还有一个空白的模型,我需要种子。最好的方法是这样做,将不胜感激,谢谢

看来我已经明白了,很抱歉。如果这段代码需要改进,我将非常感谢对它的一些评论

无论如何,我想我是用fasterCSV(或CSV)解决的。这似乎奏效了:

require 'csv'

Model.delete_all
CSV.foreach("#{Rails.root}/lib/data/model.csv") do |row|
     Model.create!(:attr_1 => row[0], :attr_2 => row[1], :attr_3 => row[2], etc)
end

我见过的最好的成功是通过执行rake任务

require 'csv'

namespace :csv do

  desc "Import CSV Data"
  task :import_stuff => :environment do

    csv_file_path = 'db/data.csv'

    CSV.foreach(csv_file_path) do |row|
      Model.create!({
        :column1 => row[0],
        :column2 => row[1],
        :column3 => row[2],        
      })
      puts "Row added!"
    end
  end
end
将它放在lib/tasks文件夹中,扩展名为.rake,要运行它,请键入:“rakecsv:import_stuff”


此外,使用SQL lite可能会遇到一些限制。。。我建议去MongoDB看看。它似乎适合你目前的情况。祝你好运

谢谢大家!!为我工作。想知道是否需要
行=
。我把它漏掉了,效果很好。绝对没有必要。很好,我从示例中删除了它:)