ruby-on-rails-3 - 将 CSV 文件播种到 Rails 应用程序时遇到问题

标签 ruby-on-rails-3 sqlite csv seed

我正在尝试将大约 2K 条记录播种到模型中,到目前为止我已经尝试使用所有不同的方法(faster csvfast_seederrailscasts 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:复合 SELECT 中的术语太多:(我的所有专栏)

无论如何,我再次觉得这应该足够简单了。我只有一个包含 2K 条目的 CSV,以及一个我需要播种的空白模型。非常感谢执行此操作的最佳方法,谢谢!

最佳答案

我见过的最好的成功是通过执行抽取任务。

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。看起来它很适合你目前的情况。祝你好运!

关于ruby-on-rails-3 - 将 CSV 文件播种到 Rails 应用程序时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12028334/

相关文章:

python - 在python中高效读取和验证csv文件

regex - sed/awk : replace megabytes with bytes (insert zeros)

ruby-on-rails - 如何在 Rails 中列出所有自动加载路径

ruby-on-rails - Ruby 图表库

ruby-on-rails - rails : if has_many relationship changed

c# - "Database is locked"SQLite 和 C#

python - 将单位与 Pandas DataFrame 关联

mysql - ActiveRecord3 死锁重试

Android 从 Assets 复制 SQLite 数据库在 KitKat 4.4 上不起作用

python - 在 SQLite 数据库中输入大量条目