在 Sequel 个应用程序中使用多个数据库

Use more than one database in Sequel application

我正在使用 sequel 从不同的数据库中查询信息。使用以下代码

Sequel.connect(mmt018_db_connection_settings) do |db|
  class ResultPlacementAssign < Sequel::Model(db[:result_placement_assign]); end
  # do something with 'ResultPlacementAssign'
end

Sequel.connect(mmt024_db_connection_settings) do |db|
  class PlatineMass < Sequel::Model(db[:platine_mass]); end
  # do something with 'PlatineMass'
end

效果很好。但是如果我尝试将我的模型定义放在单独的文件中以便在需要时需要它们,似乎只有第一个数据库连接有效。 所以将上面的代码改为

Sequel.connect(mmt018_db_connection_settings) do |db|
  require File.join(__dir__, 'models', 'm_mt_018', 'ResultPlacementAssign.rb')
  # do something with 'ResultPlacementAssign'
end

Sequel.connect(mmt024_db_connection_settings) do |db|
  require File.join(__dir__, 'models', 'm_mt_024', 'PlatineMass.rb')
  # do something with 'PlatineMass'
end

使用模型定义

class ResultPlacementAssign < Sequel::Model(:result_placement_assign)
end

class PlatineMass < Sequel::Model(:platine_mass)
end

无效。
它告诉我数据库中不存在 platine_mass,因为它仍在使用第一个连接。 我是不是遗漏了什么,或者如果模型定义是在单独的文件中定义的,是否真的没有办法告诉模型定义要使用哪个数据库连接。

您可以通过将数据库或数据集参数传递给 Sequel::Model() 来告诉 Sequel 给定模型使用哪个数据库。通常,您应该将数据库对象分配给常量:

DB1 = Sequel.connect(mmt018_db_connection_settings)
DB2 = Sequel.connect(mmt024_db_connection_settings)
class ResultPlacementAssign < Sequel::Model(DB1[:result_placement_assign]); end
class PlatineMass < Sequel::Model(DB2[:platine_mass]); end