我正在使用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
Run Code Online (Sandbox Code Playgroud)
我注意到TableB.establish_connection(new_database_params)将我连接到新服务器.那完全没问题.
当我尝试创建一个新表时,我仍然需要调用ActiveRecord :: Base来交换连接.有没有办法在ActiveRecord :: Schema上交换连接?(类似于Model.establish_connection?)
Chr*_*ris 10
从概念上讲,我遇到了完全相同的问题.我想继承ActiveRecord :: 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
Run Code Online (Sandbox Code Playgroud)
我意识到这个答案可能是一年太晚了!但它可能仍然对某人有用.
| 归档时间: |
|
| 查看次数: |
780 次 |
| 最近记录: |