我正在尝试将2K记录播种到模型中,到目前为止我尝试使用所有不同的方法(faster csv,fast_seeder和railscasts ep) 。我觉得这应该很简单。我已经将所有数据都存储在CSV文件中,并且我已经建立了模型,准备播种。
到目前为止唯一有用的是RailsCasts剧集中的内容。我为我的属性插入了这段代码,它只播放了第一行(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_Seeder
似乎有一些潜力,它识别了我的所有条目,但没有将它们保存到模型中,因为我收到了这个错误:
SQLite3::SQLException: too many terms in compound SELECT:(all my columns)
无论如何,我觉得这应该很简单。我只有一个带有2K条目的CSV,以及我需要播种的空白模型。最好的方法是非常感谢,谢谢!
答案 0 :(得分:14)
我见过的最好的成功就是做一个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
将它放在带有.rake扩展名的lib / tasks文件夹中并运行它:“rake csv:import_stuff”
此外,您可能会遇到SQL lite的一些限制......我建议您查看MongoDB。看起来它适合你目前的情况。祝好运!
答案 1 :(得分:4)
看起来我想通了,对不起。如果需要改进,我会很感激对此代码的一些评论。
无论如何,我想我用fastCSV(或者只是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