Ruby on rails RoR:“NameError异常:未初始化的常量地址”,当尝试从已填充的postgresql表访问最近添加的数据时

Ruby on rails RoR:“NameError异常:未初始化的常量地址”,当尝试从已填充的postgresql表访问最近添加的数据时,ruby-on-rails,ruby,postgresql,database-connection,Ruby On Rails,Ruby,Postgresql,Database Connection,我创建了一个Ruby脚本,将数据插入PostgreSQL数据库。数据库存在,表也存在 我的应用程序中有一个地址模型和一个公司模型,这两个模型通过公司表中引用的一对一关系地址\ id连接。我已经运行了脚本并填充了地址表,没有任何问题,但是当脚本到达从数据库地址读取现有最近保存的地址id的位置时,我得到了错误 正如我在pgAdmin中看到的那样,地址记录保存在数据库中,但脚本似乎无法识别我要从表中读取。我将感谢任何帮助 以下是与此相关的脚本的一小部分: require 'yaml' require

我创建了一个Ruby脚本,将数据插入PostgreSQL数据库。数据库存在,表也存在

我的应用程序中有一个地址模型和一个公司模型,这两个模型通过公司表中引用的一对一关系地址\ id连接。我已经运行了脚本并填充了地址表,没有任何问题,但是当脚本到达从数据库地址读取现有最近保存的地址id的位置时,我得到了错误

正如我在pgAdmin中看到的那样,地址记录保存在数据库中,但脚本似乎无法识别我要从表中读取。我将感谢任何帮助

以下是与此相关的脚本的一小部分:

require 'yaml'
require 'securerandom'
require 'active_record'
require 'logger'
require 'csv'

DB_YML = "./config/database.yml"

RAILS_ENV = ENV['RAILS_ENV'] || "development"
db_config = {}
if File.exist?(DB_YML)
  settings = YAML.load_file(DB_YML)
  if settings and settings.include?(RAILS_ENV)
    db_config["database"] = settings[RAILS_ENV]
    puts db_config
  end
else
  raise "database.yml not found!"
end

# Establish connection to the DB based on the 'development'.
ActiveRecord::Base.establish_connection(db_config["database"])
ActiveRecord::Base.logger = Logger.new(STDOUT)


ActiveRecord::Base.transaction do

address_inserts = []

CSV.foreach("script/addresses.csv") do  |row|
    line1 = row[0].strip
    line2 = row[1] unless row[1]=='nil'
    postcode = row[2] unless row[2]=='nil'
    city = row[3]
    county = row[4]

    address_inserts << "('#{line1}', "+ (line2 ? "'#{line2}'" : "null") + ", " + (postcode ? "'#{postcode}'" : "null") +
    ", '#{city}', '#{county}', now(), now())"
end

unless address_inserts.empty?
  ActiveRecord::Base.connection.execute("INSERT INTO addresses (line1, line2,\
postcode, city, county, created_at, updated_at) VALUES #{address_inserts.join(', ')}")
  #print "INSERT INTO addresses (line1, line2, postcode, city, county,created_at, updated_at) VALUES #{address_inserts.join(", ")}"
end
puts "________________________________________________________________________"
puts "addresses done"
end
ActiveRecord::Base.transaction do
  companies_inserts = []
  address_ids = Address.pluck(:id)

  CSV.foreach("script/companies.csv") do  |row|
    company_name = row[0].strip
    fax_number = row[1] unless row[1]=='nil'
    phone_number = row[2] unless row[2]=='nil'
    reg_number = row[3]
    address_id = address_ids.pop

    companies_inserts << "('#{company_name}, '#{fax_number}','#{phone_number}',\
'#{reg_number}', #{address_id}, now(), now())"
  end
  unless companies_inserts.empty?
    ActiveRecord::Base.connection.execute("INSERT INTO companies (company_name, fax_number,\
    phone_number, reg_number, address_id, created_at, updated_at) VALUES #{companies_inserts.join(", ")}")
    #print "INSERT INTO companies (company_name, fax_number,phone_number, reg_number, address_id,\
    #created_at, updated_at) VALUES #{companies_inserts.join(", ")}"
  end
  puts "________________________________________________________________________"
  puts "companies done"
end
**更新**

通过添加 需要“./config/environment.rb”
到脚本。

如果我理解正确,它是独立脚本吗?您需要声明一个地址类并从ActiveRecord::Base继承它。在您的脚本中,我将在记录器初始化之后放置此声明。否则,Ruby无法知道地址是什么。我将该脚本放在脚本文件夹中,但它是独立的。我刚刚在这里找到了一个解决方案:。我需要我的environment.rb文件。谢谢你,雅尼斯: