如何在Rails中创建用户可自定义的数据库(如Zoho创建者)?

时间:2010-04-09 06:14:47

标签: ruby-on-rails database schema

我正在学习Rails,我的实验目标是实现类似于Zoho Creator,Flexlist或Mytaskhelper的东西,即用户可以创建自己的数据库模式和视图的应用程序。追求这个目标的最佳策略是什么?

我看到了关于实体 - 属性 - 值(EAV)的一些内容,但我不确定它是否是最好的策略,或者Rails中是否有一些支持。

如果Rails中有关于类似项目的任何教程,那就太棒了。

可能它并不是学习新语言和框架的最简单的明星,但是很长一段时间以来我真的打算这样做。

5 个答案:

答案 0 :(得分:9)

你最好的选择是MongoDB。它易于学习(因为查询语言是JavaScript),它提供了无架构的数据存储。我会为每个表单创建一个文档来定义表单的结构。然后,只要用户提交数据,您就可以将数据放入通用结构中,并根据表单名称将其存储在集合中。在MongoDB中,集合就像表,但您可以动态创建它们。您还可以动态创建索引以加快搜索速度。

您尝试解决的问题是MongoDB所针对的面向文档的数据库的主要用例之一。还有其他几个面向文档的数据库,但在我看来,MongoDB目前拥有最好的API。

MongoDB Ruby tutorial读一读,我相信你会想尝试一下。

不要使用关系数据库来执行此操作。动态创建表格会很麻烦,不仅对您的系统而且对您的用户数据也是一种安全隐患。您可以通过创建跟踪表单结构的复杂模式来避免动态创建表,并且每个字段类型都需要自己的表。 Rails使得多态关联减少了痛苦,但它绝对不是很好。

答案 1 :(得分:0)

我认为这不完全是你想要的,但这个http://github.com/LeonB/has_magic_columns_fork但显然这有点类似,你可能会有一些想法开始。

答案 2 :(得分:0)

应该可以通过将DDL语句直接发送到服务器或通过动态生成迁移来生成数据库表。然后你可以使用Class.new(ActiveRecord :: Base)do ... end生成相应的ActiveRecord模型。原则上这应该有效,但必须小心谨慎。但对于初学者来说这绝对没有工作。

第二种解决方案可能是使用MongoMapperMongoDB。我的想法是使用一个集合来存储表的行,因为MongoDB的架构较少,所以你可以简单地添加属性。

答案 3 :(得分:0)

使用像mongodb或couchdb这样的文档存储将是最好的方法,因为它们是无模式的。

答案 4 :(得分:0)

使用EntryAttributeValue允许您将任何架构数据存储在一定数量的表中,但是这会产生的性能影响和维护问题可能不值得。

或者,您可以将数据存储在XML中并生成XML模式以进行验证。

所有“通用”解决方案都会遇到外键或其他限制的问题,无论您在存储之前是否在内存中进行了所有验证。