我在非 Rails 应用程序上使用 ActiveRecord。我使用这种方法连接到两个 SQLserver 数据库
class MyBase > ActiveRecord::Base
this.abstract_class = true
end
class Order > MyBase
end
class MyBase2 > ActiveRecord::Base
this.abstract_class = true
end
class Order2 > MyBase2
end
然后通过调用连接到数据库
MyBase.establish_connection(config1)
MyBase2.establish_connection(config2)
这在 AR3 中效果很好,但我正在迁移到 AR4,什么时候做这样的事情
puts Order.last.inspect
puts Order2.last.inspect
我在第二次看跌期权时遇到此错误,第一次调用按预期工作。
ActiveRecord::ActiveRecordError: ActiveRecord::Base doesn't belong in a hierarchy descending from ActiveRecord
如果我交换呼叫,那么过去失败的那个可以工作,而那个成功的失败。所以这似乎是切换连接的问题,如果我使用 mysql 或 pg 数据库,它似乎只会影响使用 activerecord-sqlserver-adapter 的连接这个问题不会发生任何帮助将不胜感激
所以这是一个奇怪的问题。我不得不将连接逻辑迁移到基类中。出于某种原因,第二次调用 created_connection 使 AR4“忘记”了第一个建立连接。这很奇怪,因为这是在 AR3 上工作的。我的模型现在看起来像这样
头等舱
class MyBase > ActiveRecord::Base
this.abstract_class = true
begin
# try the rails ways first
establish_connection(:database1_name)
rescue
# this is probably a ruby app (non-rails)
config_file = nil
# do we have a database file?
if File.exist?('config/database.yml')
config_file = 'config/database.yml'
end
# return if we could not find a config_file
return if config_file.nil?
dbconfig = YAML::load(File.open(config_file))
establish_connection(dbconfig[:database1_name])
end
end
class Order > MyBase
end
二基类
class MyBase2 > ActiveRecord::Base
this.abstract_class = true
begin
# try the rails ways first
establish_connection(:database2_name)
rescue
# this is probably a ruby app (non-rails)
config_file = nil
# do we have a database file?
if File.exist?('config/database.yml')
config_file = 'config/database.yml'
end
# return if we could not find a config_file
return if config_file.nil?
dbconfig = YAML::load(File.open(config_file))
establish_connection(dbconfig[:database2_name])
end
end
class Order2 > MyBase2
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句