我正在尝试创建一个Rails应用程序,该应用程序可以在给定json模式的情况下在非主数据库数据库中创建数据库表。该应用旨在用作管理辅助数据库的界面。应用程序将永远不会访问动态创建的表,除非可能(很少)更改表。
这是我的设置
config
|
|- secondary_db.yml
|- initializers/secondary_db.rb
所以现在我的辅助数据库配置在整个应用程序中都可用。
我有一个名为Topic
的模型,该模型接受json类型的属性topic_schema
。假定该架构是浅层次的,没有层次结构或嵌套。
topic_schema: {
"type" => "object",
"required" => ["a", "b"],
"properties" => {
"a" => {"type" => "integer"},
"b" => {"type" => "string"}
}
}
我必须创建一个名为TableCreator的服务类,该服务类可以采用此json模式并基于该表创建表。因此,每次我使用有效的json Topic
创建一个新的topic_schema
时,该表都会自动创建。请记住,我的应用程序永远不会从该表读取或写入,很少我可能不得不更改或删除该表。因此,我不需要在schema.rb文件中跟踪这些表
我可以创建一个可以将json模式转换为table migration的服务。我想弄清楚如何在不更改应用程序架构文件的情况下运行到secondary_db的迁移。非常感谢您的帮助:)
答案 0 :(得分:2)
这里是TableCreator类,实现了我想要做的事情。
class TableCreator < ActiveRecord::Migration[6.0]
def create
with_secondary_db_connection do
create_table :ts_test_table, id: false do |t|
t.datetime 'time'
t.string 'value'
end
end
end
def with_secondary_db_connection
primary = ActiveRecord::Base.remove_connection
ActiveRecord::Base.establish_connection(TIMESCALE_CONFIG)
yield
ensure
ActiveRecord::Base.establish_connection(primary)
end
end
感谢Max的建议