如何通过更改列在MySQL中存储数据

时间:2015-05-21 21:05:59

标签: mysql ruby-on-rails

我正在Rails项目中的MySQL数据库中创建一个新表。问题是某些字段将始终在桌面上,但其他字段我还不知道 - 它们将由用户生成。我知道无法动态地向表中添加字段。因此,对此有什么良好的解决方案吗?也许是一颗宝石?

要说清楚,假设我有一个名为UserInformation的表。它有列名,性别,高度。但我需要允许输入用户想要的任何其他内容。因此,对于用户A,我需要存储姓名,性别,身高,体重。对于用户B,我需要存储名称,性别,身高和favorite_tv_show。对于用户C,我需要存储名称,性别,身高和favorite_tv_show,favorite_color,mothers_name。

因为我不知道所有潜在的属性,所以我不能提前将它们添加为列名。

我无法想象我是第一个遇到这个问题的人。非常感谢你提前!

1 个答案:

答案 0 :(得分:1)

创建另一个表,其中包含key(字符串,索引),value(可能是字符串)和user_id(整数)。你可能需要调整一些东西以满足你的需要,这只是一个想法,它可能不适合原样。

对于您希望存储的每个用户的每个属性,就像在该表中创建一个单独的行一样。

我称之为ExtraField

class ExtraField < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :extra_fields

  accepts_nested_attributes_for :extra_fields,
    allow_destroy: true,
    reject_if: :all_blank
end

您必须使用nested form编辑这些属性。这是一个有点高级的概念,关于它有很多docs。实质上,它允许您使用相同的参数集不仅更新记录本身(如用户),还更新其相关记录(如额外字段)。这允许您编辑单个页面上的所有字段。