2011-03-10 88 views
0

我正在浏览一些Rails代码,并注意到模型中的一个类包含以下行:serialize:some_property。我想搭建一个包含序列化属性的新类,但我不知道如何完成它。我应该为序列化属性声明什么类型,即红宝石脚本/生成脚手架NewClass serialized_property :(应该到哪里)?谢谢你的帮助!Ruby on Rails脚手架序列化

回答

4

在继承自ActiveRecord::Base的模型上的serialize类方法将保存该列/属性并将其转换为YAML,并在加载时执行相反操作。将模型中的基本数组或散列对象保存起来非常棒。

Rails只需要在序列化字段的数据库/迁移中使用text类型的列。因此,在你迁移,只是确保你已经在你的序列化的字段之后(在这种情况下,settings):

create_table :accounts do |t| 
    t.text :settings 
end 

然后在你的模型应该如添加调用serialize简单:

​​3210

然后,当你调用Account.new(:settings => { :big_head_mode => true, :awesome => true }).save时,Rails会自动将settings散列序列化到YAML中,并将其保存到数据库中。

而且要清楚的是,脚手架与此事无关。生成脚手架后,您仍然需要在模型中添加对serialize的呼叫。

+0

谢谢!一切都很好。 – hassaanm 2011-03-10 02:39:27

+0

@coreyward它也适用于哈希数组吗?例如[{key:value},{key:value},{key:value}] – Ivan 2011-09-04 09:57:22

+0

@Ivan:你总是可以试试它,但是是的,任何干净地转换成Yaml的东西都应该顺序化。 – coreyward 2011-09-04 18:46:40