在运行时生成新模型和模式

时间:2009-11-22 15:17:23

标签: ruby-on-rails ruby database

假设您的应用程序允许用户在数据库中创建自己的表来保存自己的自定义数据。每个表都有自己的架构。什么是好方法?

我的第一个尝试是动态创建迁移文件和模型文件我想在heroku上运行它,你无法写入文件系统。

我认为eval可能是创建和运行迁移类和模型类的方法。但是我想确保在生成应用程序的新流程时存在模型类。可以通过在每个用户创建新表时存储这些类定义,然后在启动时全部运行它们来实现此目的。但是现在它已经让人感到沮丧,以至于我可能会遗漏一些明显的东西。

3 个答案:

答案 0 :(得分:3)

最好不要在运行时生成新类。除了所有的安全风险之外,如果您获得大量用户,每个线程的启动时间将是可恶的。

我建议您重新考虑您的应用设计并瞄准通用表来保存用户的自定义数据。如果您有用户可以创建的数据结构示例,我们可以提供帮助。

答案 1 :(得分:1)

您是否考虑过这些表的非SQL数据库?看看CouchDB - Github上有几个插件可以将它与rails集成。数据库中的记录是JSON文档,具有任意键值结构。可能非常适合用户定义的架构。

答案 2 :(得分:0)

有一个很酷的Wiki项目,有一个很酷的Wiki项目,名为Informl。它是一个Wiki,不仅适用于Web 页面,还适用于Web 应用程序。 (得到它?它是非正式的因为它是一个Wiki,它有表单因为它是一个应用程序,它是用户生成的,因此Web 2.0,这意味着根据一个联合国官方决议,法律要求其名称缺少vwl。)

因此,换句话说,它不仅仅是用户生成的内容,还包括用户生成的结构化数据

他们通过在运行时生成PostgreSQL特定的SQL来创建新表,然后让ActiveRecord重新加载模式来实现这一点。

代码在RubyForge上。它基于Rails 1.2.3。我想你可以比今天更好地更多尤其是与Rails 3中即将推出的可扩展性接口。