我正在查看一些Rails代码并注意到模型中的一个类包含以下行:serialize:some_property。我想构建一个包含序列化属性的新类,但我不知道该怎么做。我应该为序列化属性声明什么类型,即ruby脚本/生成脚手架NewClass serialized_property :(应该去哪里)?谢谢你的帮助!
答案 0 :(得分:4)
继承自serialize
的模型上的ActiveRecord::Base
类方法将获取该列/属性并在保存时将其转换为YAML,并在加载时执行相反的操作。它非常适合在模型中保留基本数组或哈希对象。
Rails只要求您在数据库/迁移中使用text
类型列作为序列化字段。因此,在迁移过程中,只需确保序列化字段具有以下内容(在本例中为settings
):
create_table :accounts do |t|
t.text :settings
end
然后在您的模型中,它应该像添加对serialize
的调用一样简单:
class Account < ActiveRecord::Base
serialize :settings
end
然后当你调用Account.new(:settings => { :big_head_mode => true, :awesome => true }).save
时,Rails会自动将settings
哈希序列化为YAML并将其保存在数据库中。
而且要明确的是,脚手架与此事无关。生成脚手架后,您仍需要在模型中添加serialize
的调用。