2013-07-15 23 views
0

我想导入一个CSV文件到我的SQLite3数据库中的一个现有表在一个铁轨项目。Rails的CSV导入 - 未初始化的常量对象::点

我曾尝试在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 \迁移\ 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 

下面是我根据上面链接正确的解决办法都试过:

  1. 创建新的文件名为import.rake并保存它在LIB \任务\ 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 
    
  2. 然后我在命令行运行bundle exec rake import.rake

运行此之后,我得到的错误:

uninitialised constant Object::Points 

我必须失去了一些东西,会导致此错误。我究竟做错了什么?

回答

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环境。

+0

感谢您的帮助。当我运行这个任务时,它现在返回错误'syntax error,unexpected_key_end,期待$ end'。我删除了任务中的第一个'end',但是它然后返回一个稍微不同的错误:'语法错误,意外的$结束,期待keyword_end'。 – LogiKal

+0

@LogiKal现在已经超出了这个问题的范围。我在上面提供的代码中没有块关闭问题。不幸的是,我无法修复我看不到的代码的语法错误。 – deefour

+0

你知道我在哪里可以找到导致问题的代码吗? – LogiKal