我有一个带有多个数据库连接的Rails实例,它提供两种不同的服务。假设它提供服务A 和服务B。服务A需要连接到数据库 A',而服务B需要连接到数据库 B “的。 A'和 B'中的大多数表都是相同的(表名,模式)。例如。数据库 A'和 B'都有一个具有相同模式的表User
。目前我的用户模型如下:
class User_A < ABase #connects to A'
self.table_name = "user"
def foo
...
end
end
class User_B < BBase #connects to B'
self.table_name = "user"
def foo
...
end
end
内部控制器我必须做类似的事情:
if is_A?
user = User_A.find(123)
else
user = User_B.find(123)
end
有没有更好的方法来处理轨道中的这种情况,这将最大限度地减少代码重复?
答案 0 :(得分:0)
Multitenancy for Rails and ActiveRecord
Apartment提供了一些工具来帮助您处理Rails应用程序中的多个租户。如果您需要根据帐户或公司隔离某些数据,但仍允许某些数据存在于共同租户中,则公寓可以提供帮助
gem 'apartment'
Apartment gem这使您可以以最简单的方式访问多个数据库。
Apartment::Tenant.switch db_name
现在您可以像这样访问
class User < ABase
def foo
Apartment::Tenant.switch db_a
#Do what you update in db_a
Apartment::Tenant.switch db_b
#Do what you update in db_b
end
end