作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Rails 项目的 MySQL 数据库中创建一个新表。问题是有些字段将始终在表中,但其他字段我还不知道——它们将是用户生成的。我知道不可能将字段动态添加到表中。那么,有没有什么好的既定解决方案呢?也许是 gem ?
为了清楚起见,假设我有一个名为 UserInformation 的表。它有姓名、性别、高度列。但我需要允许用户输入任何其他内容。因此,对于用户 A,我需要存储姓名、性别、高度、体重。对于用户 B,我需要存储姓名、性别、高度和 favorite_tv_show。对于用户 C,我需要存储姓名、性别、高度和 favorite_tv_show、favorite_color、 mothers_name。
因为我不知道所有潜在属性,所以无法提前将它们添加为列名称。
我无法想象我是第一个遇到这个问题的人。预先非常感谢您!
最佳答案
创建另一个表,其中包含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关于它。本质上,它允许您使用同一组参数不仅更新记录本身(如用户),还可以更新其关联的记录(如额外字段)。这允许您编辑单个页面上的所有字段。
关于mysql - 如何在 MySQL 中存储更改列的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30384311/
我是一名优秀的程序员,十分优秀!