一种解决方法是使用establish_connection方法手动连接到每个数据库,并确保在每个数据库上进行操作之前设置正确的连接。这可以通过创建一个类似于以下示例的定制模式来完成:
class MyModel < ActiveRecord::Base self.abstract_class = true
def self.connect_to_database(database_name) establish_connection(database_name.to_sym) end end
该模式允许我们创建MyModel的子类,每个子类都连接到不同的数据库:
class User < MyModel connect_to_database :primary_database end
class Product < MyModel connect_to_database :secondary_database end
现在,我们可以在每个数据库上执行操作,并确保更新操作在正确的数据库上运行:
user = User.find(1) user.update_attribute(:name, "New Name") #updates the record in primary_database
product = Product.find(1) product.update_attribute(:name, "New Name") #updates the record in secondary_database
使用这个定制模式可以避免ActiveRecord在多个数据库上操作时出现问题。