在Rails中动态创建模型和/或表

ric*_*ard 12 model ruby-on-rails dynamic

我正在研究一个项目,这个项目有一个非常不寻常的要求,我希望得到一些关于处理它的最佳方法的建议,甚至是一些可以帮助我构建解决方案的信息指针.

好的,所以这就是我需要做的.应用程序存储和管理各种类型的媒体文件,但应用程序的每个部署对媒体文件具有完全不同的元数据要求.

此元数据可以包含任意数量的不同类型的字段(单行文本,多行文本,复选框,选定值等),并且还经常需要验证特别是存在和唯一性验证.

应用程序需要能够轻松检索值,最重要的是必须能够处理这些字段的完整搜索功能.

我考虑的一个选项是使用属性列表排列,其中数据库表只包含每个媒体文件的每个元数据字段的属性名称和值.但是,在对此解决方案进行原型设计时,很快就会发现它对搜索和检索记录的效率不高,特别是当数据库可能相当大时,例如最近的部署有3000个媒体文件,并且有超过20个元数据领域.此外,快速搜索和检索相关记录的查询变得非常复杂.

系统当前使用的另一个选项是预先定义元数据配置,并在部署期间运行迁移以创建具有标准名称的表和模型,以便媒体模型可以与系统然后使用它相关联.这通常很好,但它确实会导致一些重要的部署和测试问题.

例如,如果在部署之前不知道配置,则编写单元测试会变得更具挑战性.虽然我可以编写示例配置并以这种方式测试代码,但它不允许我测试特定部署的特定要求.

同样,在开发中,它目前要求我将配置中的迁移复制到主文件夹,运行它,执行所有测试和开发,然后我必须记住回滚并从主文件夹中删除该迁移,以便应用程序处于标准状态.当我修复bug时,这尤其具有挑战性,我需要将应用程序放在特定的配置中以进行测试和调试.试图在各种配置之间切换成为一场真正的噩梦.

理想情况下,我希望能够在启动服务器时从配置文件动态创建表和模型,包括验证等.更好的是,如果我可以在一个数据库中维护多个元数据设置,每个元数据设置都有自己的表,那么我需要做的就是更改应用程序当前正在使用的配置文件.

我确信这可以通过Rails完成,但是我能够找到的信息非常少,可以指出我在过去几天的研究过程中如何构建它的正确方向所以任何帮助或建议非常感谢!

Mic*_*ant 1

您所描述的内容听起来与使用键值存储的非传统存储机制的定义要求完全相同。

我从以下方面感受到这一点:

  • “完全不同的元数据要求”和“任意数量的不同类型的字段”——键值数据存储通常没有模式,并且对于动态变化的不同记录布局非常灵活。

  • 应用程序需要能够轻松检索值,最重要的是必须能够处理这些字段的完整搜索功能。键值存储在检索和过滤查询行方面非常高效。

“属性列表排列,其中数据库表仅包含每个元数据的属性名称和值”基本上是键值存储。

一些选项是: