Ruby on Rails Scaffold Serialize

时间:2011-03-10 01:13:34

标签: ruby-on-rails ruby serialization scaffolding

我正在查看一些Rails代码并注意到模型中的一个类包含以下行:serialize:some_property。我想构建一个包含序列化属性的新类,但我不知道该怎么做。我应该为序列化属性声明什么类型,即ruby脚本/生成脚手架NewClass serialized_property :(应该去哪里)?谢谢你的帮助!

1 个答案:

答案 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的调用。