【问题标题】:Ruby on Rails Scaffold SerializeRuby on Rails Scaffold 序列化
【发布时间】:2023-03-29 16:25:01
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby serialization scaffolding


    【解决方案1】:

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

    Rails 仅要求您在数据库/迁移中为序列化字段使用 text 类型列。因此,在您的迁移中,只需确保您的序列化字段具有以下内容(在本例中为 settings):

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

    那么在你的模型中应该就像添加对serialize的调用一样简单:

    class Account < ActiveRecord::Base
      serialize :settings
    end
    

    然后当您调用Account.new(:settings =&gt; { :big_head_mode =&gt; true, :awesome =&gt; true }).save 时,Rails 会自动将settings 哈希序列化为 YAML 并将其保存在您的数据库中。

    为了清楚起见,脚手架与此事无关。生成脚手架后,您仍然需要在模型中添加对 serialize 的调用。

    【讨论】:

    • @coreyward 它也适用于哈希数组吗?例如 [{key: value}, {key: value}, {key: value}]
    • @Ivan:你总是可以尝试一下,但是任何可以干净地转换到 Yaml 和从 Yaml 转换出来的东西都应该序列化就好了。
    猜你喜欢
    • 2011-07-05
    • 2011-03-08
    • 2010-10-10
    • 2010-10-11
    • 2014-12-10
    • 2012-01-28
    • 1970-01-01
    • 2016-07-14
    • 2012-10-28
    相关资源
    最近更新 更多