2009-11-22 56 views
1

假设您的应用程序允许用户在数据库中创建自己的表以保存自己的自定义数据。每个表都有它自己的模式。有什么好方法?在运行时生成新模型和架构

我的第一个刺涉及动态创建迁移文件和模型文件埠我想在heroku上运行这个你不能写入文件系统。

我在想eval可能是创建和运行迁移类和模型类的方法。但是我想确保在产生新的应用程序时存在模型类。可以通过将这些类定义与每个用户存储在一起来创建新表,然后在启动时全部运行它们。但是现在它足够令人信服,我可能会错过一些明显的东西。

回答

3

这可能是一个更好的主意,不要在运行时生成新的类。除了所有的安全风险之外,如果你有大量的用户,每个线程的启动时间将是可恶的。

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

+0

你是对的缩放恶梦。我会回头考虑一下你的建议。用户导入的数据结构就像其他地方的数据库的yml转储。所以可能有不定数量的列,每列可能是不同的类型(字符串,布尔值,日期...)。数据也需要有效查询。 – realdeal 2009-11-22 15:52:02

+0

如果是这样的话,我会建议为每个用户分拆“迷你应用”。 – 2009-11-22 15:53:42

+0

@Ron:你能解释一下你提到的一些缺点,安全性和性能吗?我打算用我的应用做类似的事情,根据存储在数据库中的元数据动态创建应用模型。一切都会在Rails应用程序启动时发生。 当然,我不喜欢用户能够创建具有任意数量列的任意数量表的想法,但我想将元数据存储在数据库中,而不是将它们存储为ruby模型。 – 2009-11-22 18:17:48

0

有(是?)一个很酷的Wiki项目,名为Informl。这是一个Wiki,不仅仅针对网页页面,而且针对网页应用程序。 (得到它?它是非正式,因为它是一个Wiki,它有表格,因为它是一个应用程序,它是用户生成的,因此是Web 2.0,这意味着根据官方的联合国决议,它在法律上需要有一个命名一个缺少VWL)

所以,换句话说,它不只是用户生成内容,而且也方便用户生成的结构数据

他们通过在运行时生成特定于PostgreSQL的SQL来创建新表,然后让ActiveRecord重新加载模式。代码为RubyForge。它基于Rails 1.2.3。我想你可以做今天好过,尤其是对Rails 3

1

你有没有想过非SQL数据库,这些表即将到来的扩展性接口?看看CouchDB - Github上有几个插件将它与rails集成在一起。数据库中的记录是JSON文档,具有任意的键值结构。对于用户定义的模式可能是完美的。

+0

我正在考虑Mongodb在Rubyconf上的谈话之后。我只是想首先看到SQL/AR解决方案的可行性,因为我想用默认的Postgres Heroku来完成这项工作。可能再次看沙发! – realdeal 2009-11-23 00:32:44