Rails导入CSV记录 删除所有并重新创建
Rails导入CSV记录 删除所有并重新创建
我试着基于Rails Cast Import CSV实现一个CSV导入功能。它可以通过查找记录的id来更新和插入新记录,并进行编辑或创建。然而,它没有考虑到从CSV文件中删除的记录。我经验有限,我想到的解决办法是删除所有记录并重新构建它们。但显然,这样会导致性能问题。所以,我想请教你们如何处理这样的问题。
问题的原因是通过CSV文件更新记录时,只想保留CSV文件中存在的记录。解决方法是首先删除所有记录,然后插入CSV文件中的记录。可以使用smarter_csv gem来实现后台处理。
# Import CSV records, delete all and recreate require 'smarter_csv' # Delete all records ModelName.delete_all # Import records from CSV file options = { file_encoding: 'iso-8859-1', chunk_size: 1000, remove_empty_values: false } SmarterCSV.process('path/to/csv/file.csv', options) do |chunk| chunk.each do |data| # Create record ModelName.create(data) end end
以上代码首先使用`delete_all`方法删除所有记录。然后使用`smarter_csv`库来处理CSV文件。可以通过设置`file_encoding`指定文件的编码格式,`chunk_size`指定每次处理的行数,`remove_empty_values`指定是否移除空值。
在`SmarterCSV.process`块中,使用`create`方法逐条创建记录。`create`方法的参数`data`是一个哈希,包含了CSV文件中每一行的数据。
通过以上代码,我们能够实现从CSV文件中导入记录、删除所有记录并重新创建的功能。