因此,我正在构建一个新应用程序,该应用程序需要从旧应用程序中导入一些旧数据。旧的应用程序数据库是mysql,您显然不能在heroku上使用它,但我想使用postgres。基本上我是通过activerecord进行ETL的。

这是我到目前为止的内容:

# config/initializers/legacy_database.rb
LEGACY_DATABASE_URL = "mysql://myusername:#{ENV['LEGACY_DATABASE_PASSWORD']}@host/foo1008801154002"

# app/models/legacy.rb
class Legacy < ActiveRecord::Base
  establish_connection LEGACY_DATABASE_URL
end

# app/models/legacy/user.rb
class Legacy::User < Legacy
  self.table_name = 'users'
end


如果我在控制台中并且运行Legacy::User.count,则会返回正确的计数。但是,如果我尝试执行类似Legacy::User.first的操作,则会出现以下错误:

Legacy::User Load (54.0ms)  SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC LIMIT 1
Mysql::Error: Table 'foo1008801154002.legacies' doesn't exist: SHOW FULL FIELDS FROM `legacies`
ActiveRecord::StatementInvalid: Mysql::Error: Table 'foo1008801154002.legacies' doesn't exist: SHOW FULL FIELDS FROM `legacies`


我不确定为什么Rails会在表名称上添加.legacies,也不确定如何解决此问题。我认为这可能是Legacy.connection中的某些设置

有什么建议吗?

最佳答案

好吧,这相对简单。我必须将行self.abstract_class = true添加到我的Legacy Base类中。

10-08 20:21