【问题标题】:Rails CSV Import - Uninitialised constant Object::PointsRails CSV 导入 - 未初始化的常量 Object::Points
【发布时间】:2013-07-15 13:52:58
【问题描述】:

我正在尝试将 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

以下是我根据上面链接的正确解决方案尝试过的:

  1. 创建名为 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
    
  2. 然后我在命令行中运行bundle exec rake import.rake

运行后报错:

uninitialised constant Object::Points

我一定遗漏了导致此错误的某些内容。我做错了什么?

【问题讨论】:

    标签: ruby-on-rails database sqlite csv import


    【解决方案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
    

    =&gt; :environment 对任务的依赖是 Rails 环境的启动。

    【讨论】:

    • 感谢您的帮助。当我运行任务时,它现在返回错误syntax error, unexpected keyword_end, expecting $end。我删除了任务中的第一个end,但随后它返回了一个稍微不同的错误:syntax error, unexpected $end, expecting keyword_end
    • @LogiKal 就目前而言,这超出了这个问题的范围。我上面提供的代码中没有块关闭问题。很遗憾,我无法修复我看不到的代码的语法错误。
    • 你知道我在哪里可以找到导致问题的代码吗?
    • 控制台会告诉您发生错误的确切行。那应该给你一个好主意。除此之外,您最好使用相关代码创建一个新问题,否则我只是猜测。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2011-08-24
    • 1970-01-01
    • 2015-12-27
    • 2020-12-02
    • 1970-01-01
    相关资源
    最近更新 更多