Ruby on rails 动态创建新的活动记录模型和数据库表

Ruby on rails 动态创建新的活动记录模型和数据库表,ruby-on-rails,ruby,database,Ruby On Rails,Ruby,Database,我不确定这个问题的确切名称。我刚开始服务器端编程,需要一些帮助 到目前为止,我在RoR上阅读的所有教程都涉及创建一个预定义的表和预定义的字段(id、姓名、电子邮件等)。它们使用ActiveRecord作为基类,并由超类自动处理保存到db的操作 我试图编程的是允许用户定义带有字段的表。所以想一想。web UI将有一个空表,用户将命名该表,并添加列(字段),然后添加行,然后保存它。我将如何实现这一点?我不是要问细节,只是想了解一下。正如我所说的,到目前为止,我所阅读的所有教程都涉及预定义了Activ

我不确定这个问题的确切名称。我刚开始服务器端编程,需要一些帮助

到目前为止,我在RoR上阅读的所有教程都涉及创建一个预定义的表和预定义的字段(id、姓名、电子邮件等)。它们使用ActiveRecord作为基类,并由超类自动处理保存到db的操作

我试图编程的是允许用户定义带有字段的表。所以想一想。web UI将有一个空表,用户将命名该表,并添加列(字段),然后添加行,然后保存它。我将如何实现这一点?我不是要问细节,只是想了解一下。正如我所说的,到目前为止,我所阅读的所有教程都涉及预定义了ActiveRecord子类的字段的预定义表

简而言之,我想问的是,如何在运行时在db中创建表,并向表中添加字段

希望我是清楚的,如果没有,请让我知道,我会尝试详细一点。
谢谢。

除非您正在构建一个数据库管理工具(甚至可能在那时),否则以您建议的方式允许用户直接访问数据库层可能是一个坏主意。除了稳定性和安全性问题外,如果用户创建大量表,速度会非常慢

例如,如果要在100个用户表中搜索某个值,则必须运行100个单独的查询。创建的用户表越多,站点速度就会呈指数级下降

一种更明智的方法可能是使用这样的表模型

class Table < ActiveRecord::Base
  has_many :fields
  has_many :rows
end
类表
每个表都会附加字段和行来存储相应的数据(这些数据会以某种方式进行编码)


然而,@Aditya正确地指出,这并不是真正的初学者

我大体上同意前面的回答。您的问题不清楚为什么要在运行时创建表。这样做的好处并不明显。如果您只是试图将数据存储到一个包含行和列的表中,为什么不将其作为数组存储在用户表的字段中呢。如果您的用户被允许创建许多表,那么您可以有如下功能

class User < ActiveRecord::Base
     has_many :tables
  end
class用户

然后每个表可能都有一个字段来存储序列化数组。或者你可以按照Alex的建议去做——最好的选择实际上取决于你对数据的处理方式、数据更改的频率、是否需要搜索等等……

你可以创建一个数据库,如教程所示,它存储用户所需的表名和列名。然后您可以让worker(可以使用Redis和Resque构建,在Resque和Redis上是简单的Tut)并让这些worker在数据库中创建新条目后立即为您运行迁移(使用变量写入迁移并使用参数替换它们)。如果您对此有任何疑问,请告诉我。

如果您刚开始使用服务器端web编程,那么从Hello world开始如何?:)从你的问题看来,你想用一大堆元编程来构建一个web控制的数据库。我建议采取循序渐进的措施。我可以想象你想要的是如何实现的,只是没有在“刚刚开始服务器端编程”中解释。我是用最好的方式说的。是吗?让临时用户做你的数据库设计师是一项风险很大的工作。你所做的实际上是非常先进的,而且基本上是一个坏主意(但实际上对于新手来说是很常见的!)。系统的用户应该存储数据。让他们创建表只是一种不好的方法,也是一个不好的主意,除非您有大量的dbms经验。模式创建者(在本例中是您)只需创建灵活的数据结构即可存储您所需的任何内容。忘记用户创建表的方法吧。毕竟,他们也会创建索引吗?他们理解独特吗?他们明白吗?复合键?你问了什么。所以,请程序员们以某种方式回答这个问题。我不理解“坏主意,不要那样做”的评论。我有和0xSina相同的问题,我不想让客户创建数据库,但他只是想支付这样的应用程序。现在该怎么办?他才刚开始。“可以使用Redis和Resque构建”是nutso。这是“内部平台”反模式。您正在使用现有的数据库平台创建一个“内部”数据库,这个数据库的性能会很差,并且比创建和修改实际的表更难理解。对他来说,最好是动态地改变一个独立数据库或应用程序模式的模式,当然要有一定的安全预防措施。我同意这当然不是初学者的东西。