在Rails3中使用smarter_csv的未定义方法错误

时间:2014-06-04 19:18:38

标签: ruby-on-rails csv

我希望找到一种相对快速的方法将数据从CSV文件导入sqlite3数据库,并将smarter_csv标识为可能的候选人我在应用他们的数据导入方法时遇到了困难分批。

我有两个版本,第一个(基本版本)可用,第二个版本当前产生错误undefined method 'collection' for class

第一种方法一次一行地导入csv文件中的所有内容并成功运行:

  f = File.open("newdata.csv", "r:bom|utf-8")
  templist = SmarterCSV.process(f) do |row|
        Alldata.create( row.first )
  end
  f.close

但是,当我尝试以块的形式执行此过程时,我得到了上面提到的问题。我的代码目前是:

  f = File.open("newdata.csv", "r:bom|utf-8")
  templist = SmarterCSV.process(f,{:chunk_size => 2}) do |chunk|
    Alldata.collection.insert( chunk )
  end
  f.close

我对Rails一般都是新手,所以这可能是一个非常基本的问题,但任何建议和指导都会很棒

1 个答案:

答案 0 :(得分:0)

关键问题是我没有在控制器中定义一个名为collection的方法。将collection.insert行更改为Alldata.create(chunk)会删除错误并插入所有数据,但是,性能与第一种方法相同。目前正在考虑直接在sqlite3进行导入,而不是通过rails,因为我相信性能会好得多。

通过sqlite3 console执行此操作,将其从8小时进程转换为3秒进程:)