在现有表中插入列

时间:2016-09-22 15:24:05

标签: mysql ruby-on-rails ruby database

我想知道网站上的用户是否有办法在表格中插入列。

我的情况是:管理员希望每年定义一个表结构。然后管理员希望用户将数据插入到该表中。

E.g。在网站上它可能看起来像这样: First table 在稍后阶段,管理员希望向表中添加一个额外的列,但保持数据完好无损。该表现在看起来像这样:

Additional table

您如何容纳此功能?我正在考虑创建一个包含很多隐藏字段的模型,管理员以后可以“取消隐藏”并命名,但我不确定这是最佳做法:)。

任何可以解决这个问题的想法都将不胜感激! (我在轨道上用红宝石编码,但我不认为这种语言在这种情况下特别相关)

OXp1845

1 个答案:

答案 0 :(得分:3)

我不建议插入列,而是使用垂直属性表。例如。

admin_tables       
| id | year or any other descriptor you want |
  1    2015
  2    2016 

admin_table_columns
| id | admin_table_id | named_column |
  1         1             name
  2         1             description
  3         1             info1
  4         1             info2 
  5         2             name 
  6         2             description
  7         2             info1
  8         2             info2 
  9         2             info3

user_inputs 
| id | user_id| admin_table_column_id | data |
  1      1              1               input for name
  2      1              2               input for description
  3      1              4               input for info2 
     .....           

这将允许管理员根据需要向“表”添加任意数量的属性,而无需动态更改现有数据或插入新列,模型可定义为:

class AdminTable < ActiveRecord::Base
   has_many :admin_table_columns
   has_many :user_inputs, through: : :admin_table_columns
end 

class AdminTableColumn < ActiveRecord::Base
   belongs_to :admin_table
   has_many :user_inputs
end

class UserInput < ActiveRecord::Base
   belongs_to :admin_table_column
   belongs_to :user
end

显然这是一个简化的例子,但我认为它应该让你走上正轨。