如何在 Ruby on Rails 应用程序的单个单元格记录中保存多个值?
如果我有一个名为: 、和Exp
列的表,如果我希望用户在一行中存储多个值,例如:教育机构或技能,那么最佳实践是什么?Education
Experience
Skill
我想让用户使用多个文本字段,但应该进入相同的单元格记录。
例如,如果用户有多种技能,这些技能应该在一个单元格中吗?如果我为技能创建一个新表,这会是最好的还是会更好?
请指教,
谢谢
如何在 Ruby on Rails 应用程序的单个单元格记录中保存多个值?
如果我有一个名为: 、和Exp
列的表,如果我希望用户在一行中存储多个值,例如:教育机构或技能,那么最佳实践是什么?Education
Experience
Skill
我想让用户使用多个文本字段,但应该进入相同的单元格记录。
例如,如果用户有多种技能,这些技能应该在一个单元格中吗?如果我为技能创建一个新表,这会是最好的还是会更好?
请指教,
谢谢
我不建议在同一个数据库列中存储多个值。这会使查询变得非常困难。例如,如果您想查找所有具有特定技能的用户,则查询在可读性和性能方面都会显得笨拙。
但是,在某些情况下它仍然有意义。
ActiveRecord 对此有内置支持。您可以存储Hash
或存储Array
在数据库列中。
只需将列标记为Text
rails g model Exp experience:text education:text skill:text
接下来,序列化Model
代码中的列
class Exp < ActiveRecord::Base
serialize :experience, :education, :skill
# other model code
end
现在,您可以将Hash
or保存Array
在数据库字段中!
Exp.new(:skill => ['Cooking', 'Singing', 'Dancing'])
您可以使用单列中的序列化列表(逗号分隔)来执行此操作,但这是一个非常糟糕的主意,请阅读这些答案以进行推理:
我建议更改您的架构以在用户和技能之间建立一对多的关系。
这取决于你想要什么样的功能。如果您想将 Exp 模型属性与表单绑定(用于新建和更新操作)并对其进行一些验证,最好将其保存在单独的表中。另一方面,如果这些只是属性,您只需在数据库中将它们保存在单个列中。您可以通过某种方式将序列化对象(如数组和哈希)保留在数据库列中。根据您的需要将它们设为数组/散列并像这样保存。
序列化属性,从表中拉出时自动反序列化,保存时自动序列化。