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