【发布时间】:2020-06-20 10:40:57
【问题描述】:
我正在尝试创建一个 Rails 应用程序,该应用程序可以在给定 json 架构的情况下在 非主 DB 中创建数据库表。该应用程序旨在充当管理辅助数据库的界面。应用程序永远不会访问动态创建的表,除非可能(很少)更改表。
这是我的设置
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_schema 创建一个新的 Topic 时,表都会自动创建。请记住,我的应用程序永远不会从该表中读取或写入,我可能很少需要更改或删除该表。所以我不需要在我的 schema.rb 文件中跟踪这些表
我可以创建一个可以将 json 模式转换为table migration 的服务。我想弄清楚如何在不更改应用程序架构文件的情况下运行到secondary_db 的迁移。非常感谢您的帮助:)
【问题讨论】:
-
这只是我的 2c,但迁移的全部目的是改变 Rails 应用程序数据库模式作为开发人员关注的问题,这与它设计的用例相去甚远。与其试图将你正在做的事情硬塞进一个非常不合适的事情中,你应该真正考虑使用
ActiveRecord::ConnectionAdapters::TableDefinition和ActiveRecord::ConnectionAdapters::SchemaStatements,它们是在你自己的逻辑类中生成 SQL 的 DSL。
标签: ruby-on-rails activerecord ruby-on-rails-5 database-migration ruby-on-rails-6