在ActiveRecord :: Schema上切换连接

我正在使用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.establish_connection(new_database_params)将我连接到新服务器。 那完全没问题。

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

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

在引擎盖下,Schema是Migration的子类,它在您提供的块上调用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 

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