我不确定我应该为这个问题命名。我刚开始服务器端编程,我需要一些帮助。
我目前在RoR上阅读的所有教程都涉及创建预定义表和预定义字段(id,name,email等等) )。它们使用ActiveRecord作为基类,并且保存到db由超类自动处理。
我正在尝试编写的内容允许用户定义的表包含字段。所以想想这样的方式。 Web UI将有一个空表,用户将命名表,并添加列(字段),然后添加行,然后保存它。我该如何实现?我不是要求细节,只是概述它。正如我所说,到目前为止我读过的所有教程都处理预定义的表,其中包含预定义ActiveRecord子类的字段。
简而言之,我要问的是,如何在运行时的db中创建表,并向表中添加字段。
希望我很清楚,如果没有,请告诉我,我会再详细说明一下。 感谢。
答案 0 :(得分:2)
除非您正在构建数据库管理工具(甚至可能是这样),否则允许用户以您建议的方式直接访问数据库层可能是一个坏主意。除了稳定性和安全性问题之外,如果用户创建了大量表格,它会变得非常慢。
例如,如果要在100个用户的表中搜索特定值,则必须运行100个单独的查询。创建的用户表越多,该站点的指数就越小。
更实用的方法可能是拥有像这样的Table模型
class Table < ActiveRecord::Base
has_many :fields
has_many :rows
end
每个表都附加了字段,以及存储相应数据的行(以某种方式编码)。
然而,正如@Aditya正确指出的那样,这不是真正的初学者!
答案 1 :(得分:1)
我同意以前的答案。从您的问题为什么您想要在运行时创建表格并不清楚。这样做的好处并不明显。如果您只是尝试存储似乎适合包含行和列的表的数据,为什么不将它作为数组存储在用户表的字段中。如果允许您的用户创建许多表,那么您可以使用
class User < ActiveRecord::Base
has_many :tables
end
然后每个表可能有一个字段来存储序列化数组。或者你可以选择亚历克斯的建议 - 最好的选择实际上取决于你将如何处理数据,改变的频率,是否需要搜索等等......
答案 2 :(得分:1)
您可以创建一个数据库,如教程中所示,它存储表的名称及其列名称,指定用户想要的名称。然后你可以让worker(可以使用Redis和Resque构建,here是简单的Tut on Resque和Redis)并让这些worker运行迁移(使用变量编写迁移并使用params来替换它们)只要在数据库中创建了新条目,就会在DB中创建表。如果您对此有疑问,请告诉我。