如何在Ruby on Rails应用程序中的单个单元格记录中保存多个值?
如果我有一个名为Exp
的表格,其中包含名为Education
,Experience
和Skill
的列,如果我希望用户存储多个值,那么最佳做法是什么如:教育机构或单一技能?
我想让用户使用多个文本字段,但应该进入相同的单元格记录。
例如,如果用户有多种技能,那么这些技能应该在一个单元格中?如果我只为技能创建一个新表,这会是最好还是会更好?
请指教,
由于
答案 0 :(得分:8)
我不建议在同一个数据库列中存储多个值。它会使查询变得非常困难。例如,如果您想查找具有特定技能集的所有用户,则查询在可读性和性能方面都会笨拙。
但是,仍然存在某些有意义的情况。
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
或Array
保存在数据库字段中即可!
Exp.new(:skill => ['Cooking', 'Singing', 'Dancing'])
答案 1 :(得分:1)
您可以使用单个列中的序列化列表(以逗号分隔)来完成此操作,但这是一个非常糟糕的主意,请阅读这些答案以获得推理:
我建议您更改架构,以便在用户和技能之间建立一对多的关系。
答案 2 :(得分:0)
答案 3 :(得分:0)
这取决于您想要的功能类型。如果要将Exp模型属性与表单绑定(对于新操作和更新操作)并对它们进行一些验证,最好将它保存在单独的表中。另一方面,如果这些只是属性,您只需要在数据库中将它们保存在一个列中。有一种方法可以保存序列化对象,如数据库列中的数组和哈希。根据需要将它们设为数组/哈希并保存为这样。
序列化属性,在从表中拉出时自动反序列化,并在保存时自动序列化。