我正在尝试将CSV文件导入到rails项目的SQLite3数据库中的现有表中。
我在this solution上尝试了正确答案,但收到错误:
uninitialised constant Object::Points
这是我的主目录中的data.csv文件:
Item,2003,2004,2005,2006,2007
AA2,43,34,23,52,24
TT2,48,39,29,23,29
这是我的模型文件,保存在app \ models \ points.rb:
中class Points < ActiveRecord::Base
attr_accessible :Item, :2003, :2004, :2005, :2006, :2007
end
这是我的迁移文件,保存在db \ migrate \ 20130709123346_create_points.rb中:
class CreatePoints < ActiveRecord::Migration
def change
create_table :points do |t|
t.varchar(255) :Item
t.integer :"2003"
t.integer :"2004"
t.integer :"2005"
t.integer :"2006"
t.integer :"2007"
t.timestamps
end
end
end
以下是基于上面链接的正确解决方案尝试的内容:
创建名为import.rake的新文件并将其保存在lib \ tasks \ import.rake中:
require 'csv'
csv_text = File.read('data.csv')
csv = CSV.parse(csv_text, :headers => true)
csv.each do |row|
Points.create!(row.to_hash)
end
然后我在命令行中运行bundle exec rake import.rake
。
运行此操作后,我收到错误:
uninitialised constant Object::Points
我必须遗漏导致此错误的内容。我做错了什么?
答案 0 :(得分:1)
您需要将import.rake
的内容定义为实际任务。此外,正如您的代码所代表的那样,rake对您的Rails环境一无所知,这就是它找不到Points
的原因。例如
require 'csv'
namespace :import do
task :points => :environment do
csv_text = File.read('data.csv')
csv = CSV.parse(csv_text, :headers => true)
csv.each do |row|
Points.create!(row.to_hash)
end
end
end
然后从命令行
bundle exec rake import:points
=> :environment
对任务的依赖性将启动Rails环境。