`

ruby的serialize序列化与属性分解

阅读更多
      序列化(Serialize)通常指的是將一個物件轉換成一個可被資料庫儲存及傳輸的純文字形態,反之將這筆資料從資料庫讀出後轉回物件的動作我們就稱之為反序列(Deserialize),Rails提供了serialize讓你指定需要序列化資料的欄位,任何物件在存入資料庫時就會自動序列化成YAML格式,而當從資料庫取出時就會自動幫你反序列成原先的物件。下面的範例中,settings通常是text型態讓我們有更大的空間可以儲存資料,然後我們將一個Hash物件序列化之後儲存到settings裡:
class User < ActiveRecord::Base
  serialize :settings
end

> user = User.create(:settings => { "sex" => "male", "url" => "foo" })
> User.find(user.id).settings # => { "sex" => "male", "url" => "foo" }

雖然序列化很方便可以讓你儲存任意的物件,但是缺點是序列化資料就失去了透過資料庫查詢索引的功效,你無法在SQL的where條件中指定序列化後的資料。

序列化将两个类属性指向一个记录字段的用法:
class Media
  serialize :regions, Hash

  def other_countries
    (self.regions = {}) if self.regions.blank?
    self.regions["other_countries"] || []
  end

  def other_countries=(value)
    (self.regions = {}) if self.regions.blank?
    self.regions["other_countries"] = value
  end

  def other_cities
    (self.regions = {}) if self.regions.blank?
    self.regions["other_cities"] || []
  end

  def other_cities=(value)
    (self.regions = {}) if self.regions.blank?
    self.regions["other_cities"] = value
  end
 
end


代码生成country和city属性,序列化hash格式存储到regions字段中
0
0
分享到:
评论

相关推荐

    TIA博途-序列化指令Serialize的具体使用方法示例.docx

    在TIA博途中,序列化指令`Serialize`是一个非常重要的功能,它允许我们将复杂的自定义数据类型(如UDT, STRUCT等)转换为基本数据类型,通常是BYTE或CHAR类型的数组。这在数据交换、存储和通信过程中特别有用,因为...

    Ruby-Kashmir是一个RubyDSL使得序列化和缓存对象易如反掌

    **Ruby-Kashmir:轻松实现序列化与缓存** Ruby-Kashmir是一个专门为Ruby开发者设计的Domain Specific Language(DSL),它的主要目标是简化对象的序列化和缓存过程。通过这个库,开发者可以方便地管理和存储他们的...

    XML序列化与反序列化 实战

    XML序列化与反序列化是.NET框架中处理数据交换的重要技术,它允许我们将对象的状态转换为XML格式的数据,也可以将XML数据恢复为等效的对象。这个实战项目专注于使用C#实现这一过程,使得开发者能够方便地在XML文件和...

    c#序列化和反序列化

    - **非序列化属性**:如果某个属性不需要序列化,可以使用`[NonSerialized]`属性来标记。 - **兼容性问题**:在进行版本更新时,需要注意序列化格式的兼容性问题。 - **安全性考虑**:序列化可能会引入安全风险,...

    java 序列化时排除指定属性

    然而,有时候我们不希望序列化对象的所有属性,可能是因为某些属性包含敏感信息,或者它们在反序列化时不需要。针对这种情况,Java提供了机制来排除特定属性进行序列化。本文将深入探讨如何在Java中实现这一功能。 ...

    派生类的序列化Serialize

    要使一个类可序列化,我们需要在类上添加`[Serializable]`属性,或者使用`XmlSerializer`类来指定要序列化的属性和字段。 对于派生类的序列化,关键在于处理继承层次结构。如果一个基类和它的派生类都有需要序列化...

    序列化和反序列化的封装类

    反序列化时,我们需要确保接收的数据与原始对象类型匹配,否则可能会抛出异常。 为了简化序列化和反序列化的操作,开发者通常会创建一个封装类,该类提供简单的API供其他代码调用。例如,我们可以创建一个名为`...

    C#源码序列化与反序列化

    4. **序列化配置与忽略属性** - 使用`[IgnoreDataMember]`或`[NonSerialized]`属性忽略特定字段不参与序列化。 - `DataContract`和`DataMember`特性允许更细粒度的控制,例如字段排序和是否必需。 5. **XML与JSON...

    C#对象序列化与反序列化

    - **`[XmlAttribute]`**:表示该成员将作为XML属性序列化。 - **`[XmlText]`**:表示该成员将作为XML文本序列化。 - **`[XmlType]`和`[XmlAttribute]`**:用于重命名节点名称。 - **列表和数组的序列化**:列表和...

    基于boost的序列化与反序列化

    在 Boost.Serialization 中,你需要为要序列化的类定义两个友元函数:`serialize()` 和 `save_construct_data()`。`serialize()` 函数用于实际的数据存取,而 `save_construct_data()` 用于保存构造对象所需的信息,...

    序列化窗体所有控件

    对于每个控件,我们可以使用反射获取其属性(如名称、位置、大小等),然后使用XML序列化将这些信息写入XML文件。 例如,我们可能创建一个名为`SerializeFormControls`的方法: ```csharp public void ...

    详解Python 序列化Serialize 和 反序列化Deserialize

    详解Python 序列化Serialize 和 反序列化Deserialize 序列化 (serialization) 序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化, 它将流转换为对象。这两个过程结合起来,可以轻松地...

    XmlDemoTranfer Xml序列化与反序列化

    Xml序列化与反序列化是.NET框架中一种重要的数据转换技术,主要应用于将对象的状态转换成XML格式的字符串,便于存储或传输,同时也能够将XML数据还原为对象。在C#编程中,这一功能通常通过System.Xml.Serialization...

    C#对象序列化反序列化保存与读取和对象直接保存与读取

    其使用`DataContract`和`DataMember`特性来标记要序列化的类和属性。 - `JsonSerializer`(来自`Newtonsoft.Json`库):广泛用于JSON格式的数据交换,特别适合Web API和JavaScript交互。它的性能较好,且JSON格式...

    序列化与反序列化经典例子

    序列化与反序列化是计算机科学中的重要概念,特别是在数据存储、网络通信和持久化对象等领域。简单来说,序列化是将对象的状态转换为可存储或传输的数据格式的过程,而反序列化则是将这种数据格式恢复为原来的对象...

    c#对象序列化与反序列化实例

    在C#编程中,对象序列化和反序列化是至关重要的技术,它们允许开发者将复杂的对象状态转换为可存储或可传输的数据格式,如XML...以上就是关于C#对象序列化与反序列化的基本知识,以及如何在实践中应用这些概念的实例。

    se_mouz_image.rar_serialize_序列化

    而“cad”可能是另一个文件,可能与CAD(计算机辅助设计)相关,但根据描述,它可能不是直接与序列化或鼠标画图功能相关的。 总结起来,这个主题展示了如何结合PHP的`serialize()`函数和前端的Canvas技术,实现文档...

    C#序列化与反序列化

    三、序列化属性和特性 为了控制序列化过程,可以使用特定的属性和特性。例如: 1. `[Serializable]`:标记类为可序列化。 2. `[NonSerialized]`:忽略特定字段的序列化。 3. `[XmlAttribute]` 和 `[XmlElement]`:...

Global site tag (gtag.js) - Google Analytics