Rails Rake任务删除表并从csv导入

时间:2014-03-24 05:55:24

标签: ruby-on-rails activeadmin

我正在尝试编写一个rake任务来删除一个表并从csv重新填充它。目的是按计划从另一个系统获取数据,并使用我的rails应用程序的管理界面中的按钮导入新数据。这个新数据将覆盖表中的旧数据。

我不确定如何做到这一点所以我正在玩rake任务。到目前为止,我可以导入新数据,但我无法弄清楚如何首先删除表。到目前为止我的代码是:

namespace :csvimportproducts do

  desc "Import Products CSV Data."
  task :import_products_csv_data => :environment do

    ActiveRecord::Migration.drop_table products

    require 'csv'
    csv_file_path = '/home/jay/workspace/db/import_tables/products.csv'
    CSV.foreach(csv_file_path) do |row|
      p = Product.create!({
          :product_id => row[0],
          :product_name => row[1],
        }
      )
    end
  end
end

目前我正在本地存储csv文件,但稍后打算让管理员将其作为csv文件上传。

有什么想法吗?我的错误是:

rake aborted!                                                                                                                                                      
undefined local variable or method `products' for main:Object                                                                                                      
/lib/tasks/import_products_csv.rake:6:in `block (2 levels) in <top (required)>'                                                               
Tasks: TOP => csvimportproducts:import_products_csv_data

1 个答案:

答案 0 :(得分:2)

尝试通过运行自定义sql命令来截断表:

namespace :csvimportproducts do

  desc "Import Products CSV Data."
  task :import_products_csv_data => :environment do

    ActiveRecord::Base.connection.execute("TRUNCATE TABLE products")

    require 'csv'
    csv_file_path = '/home/jay/workspace/db/import_tables/products.csv'
    CSV.foreach(csv_file_path) do |row|
      p = Product.create!({
          :product_id => row[0],
          :product_name => row[1],
        }
      )
    end
  end
end