gpt4 book ai didi

ruby-on-rails - 在 ActiveRecord::Schema 上切换连接

转载 作者:行者123 更新时间:2023-12-03 00:47:15 25 4
gpt4 key购买 nike

我使用的是 Rails 2.3.5 和 mysql。

我有一个模型 TableA 和另一个模型 TableB。 TableA 完全没问题..但我需要交换 TableB 的连接。我正在连接到其他地方的另一台服务器,因此我必须检查该表是否存在。如果没有,我将创建一个新表。

TableB.establish_connection(new_database_params)
unless TableB.table_exists?
ActiveRecord::Base.establish_connection(new_database_params)
ActiveRecord::Schema.define do
create_table :table_bs do |t|
t.column :text, :string
end
end
ActiveRecord::Base.establish_connection("#{RAILS_ENV}")
end

我注意到 TableB.built_connection(new_database_params) 将我连接到新服务器。那完全没问题。

当我尝试创建新表时,我仍然需要调用 ActiveRecord::Base 来交换连接。有没有办法交换 ActiveRecord::Schema 上的连接? (类似于Model.built_connection?)

最佳答案

从概念上讲,我遇到了完全相同的问题。我想继承 ActiveRecord::Base 并为该连接构建一个架构。我花了很长时间才弄清楚,并且深入研究了 ActiveRecord::Base、Schema 和 Migration,但我找到了一个有效的解决方案,而且非常简单。

在底层,Schema 是 Migration 的子类,它在您提供的 block 上调用 instance_eval。因此,我们在Migration类的范围内,可以将其@connection实例变量更改为ActiveRecord::Base子类的连接,即

ActiveRecord::Schema.define do
@connection = TableB.connection
create_table :table_bs do |t|
t.column :text, :string
end
end

我意识到这个答案可能已经晚了一年!但它可能对某人仍然有用。

关于ruby-on-rails - 在 ActiveRecord::Schema 上切换连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4743007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com