无法在Ruby on Rails 3中将csv导入MySQL数据库

ana*_*rce 5 ruby mysql ruby-on-rails-3

我正在通过Ruby on Rails 3将数据从CSV文件导入MySQL数据库.客户模型已经创建.此外,下面的脚本将生成puts row [2]并正确放置row [3].当我为customers.warranty_part_no和warranty_part_desc的数据库字段添加分配时,会产生以下错误.

csv = CSV.read(file, col_sep: ",", headers: false)

c = Customer.new  
csv.each do |row|
        c.warranty_part_no = row[2],
        c.warranty_part_desc = row[3]
end
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误.

uninitialized constant Customer (NameError)
Run Code Online (Sandbox Code Playgroud)

经过一些测试后,我认为这个问题是因为我从命令行运行这个脚本,因此没有使用更大的rails应用程序执行customer.rb模型,因此永远不会创建Customer类.如何从命令行运行此脚本并利用ActiveRecord或activerecord-import?如果那是不可能的,我该如何为它创建路径或从应用程序中的视图调用它?

我在Ruby 1.9.2和Rails 3.2.2上.提前感谢任何建议.

Mar*_*mas 2

正如您所发现的,问题在于您的 Rails 环境未加载。您可以在独立脚本中执行此操作,方法是包含 Customer 模型、active_record 并使用 database.yml 建立连接。

然而,还有一个更简单的方法。像这样创建一个 rake 任务:

namespace :data do
  desc "Import data from CSV"
  task :import => :environment do
    #Your script here
  end
end
Run Code Online (Sandbox Code Playgroud)

=> :environment告诉 rake 加载 Rails,以便您的数据库连接和所有模型都可供您使用。

使用 调用它rake data:importRAILS_ENV=production如果需要生产环境,请添加。