`

关于Rails serialized属性

阅读更多
Active Record 有个serialized属性,简单说说关于这个属性的一些东西

1. 干什么用的


    实现在文本字段存储序列化的值.即,序列,哈希表,数组等.   

2. serialized怎么用

以下是官方API中的例子
  class User < ActiveRecord::Base
    serialize :preferences # users表中有preferences字段,类型是文本的
  end

  user = User.create(:preferences => { "background" => "black", "display" => large })
  User.find(user.id).preferences # => { "background" => "black", "display" => large }


  class User < ActiveRecord::Base
    serialize :preferences, Hash#指定了序列化类型
  end

  user = User.create(:preferences => %w( one two three ))#赋值是array类型
  User.find(user.id).preferences    # 提示序列化类型不匹配错误raises SerializationTypeMismatch


3. 帮助理解的例子

数据库有个settings表,该表有id和文本的menu属性
#model描述
class Setting < ActiveRecord::Base
  serialize :menu
end


 # 创建记录
 s = Setting.new
 => #<Setting id: nil, menu: nil>
  
 # 分配序列menu值,例子2个,可以更多
 s.menu = [ 'subscription', 'membership' ]
 => ["subscription", "membership"]
  
 # 读取该值,以便验证
 s.menu
 => ["subscription", "membership"]
  
 # 保存记录
 s.save
 => true

数据库存储数据如下:
 id: 1
 menu: --- \n- subscription\n- membership
#So it was serialized to YAML correctly.查看数据库,可以知道成功序列化成YAML格式

重新读取
 s2 = Setting.find(1)
=> #<Setting id: 1, menu: ["subscription", "membership"]>
 
 # Read the menu attribute and So it was deserialized too 
 # 表明反序列化成功
s2.menu
 => ["subscription", "membership"]



4. 在什么情况下使用

这个API看不出来,我们可以假设一个情景. 当前,SNS网络比较流行,对于当前用户User的Blog可能有很多用户访问, 那么,用户之间可能是好友关系.这就需要判断,而这个判断经常会用到, 那么,或者我们需要查询一个类似friendship-status表,或者,需要一个很长的针对user id的查询.

显然,面对这样的情景,都会需要比较长的时间.那么,serialized在这种情况下,比较好用.就是把用户id序列化到文本属性就可以了.

5. Rails 2.1以后为什么不能保存


#会执行失败
def add_to_friend_ids_cache(friend_id)
self.friend_ids_cache << friend_id unless self.friend_ids_cache.include?(friend_id)
self.save
end

def add_to_friend_ids_cache(friend_id)
self.friend_ids_cache_will_change!#_will_change! method for handling dirty objects
self.friend_ids_cache << friend_id unless self.friend_ids_cache.include?(friend_id)
self.save
end


分享到:
评论

相关推荐

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    Rails项目源代码

    在这个项目中,`User`和`Image`模型可能会与数据库中的相应表关联,通过定义属性和关系,如`has_many :images`表示一个用户可以拥有多个图片。 5. **路由配置**: Rails的路由系统将URL映射到控制器的行动上,如`/...

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    Rails

    压缩包子文件的文件名称 "Ruby on Rails.pptx" 提示可能是一个关于Rails的PowerPoint演示文稿,其中可能涵盖了Rails的基础概念、安装步骤、主要组件介绍、开发流程、最佳实践,以及可能的示例代码和案例研究。...

    使用Aptana+Rails开发Rails Web应用(中文)

    例如,要在Rails应用中创建一个新的资源,如博客文章,你需要在models目录下创建一个名为`post.rb`的文件,定义Post类,并设置属性如标题和内容。在controllers目录下创建`posts_controller.rb`,定义控制器方法,如...

    Ruby on Rails入门例子

    在Rails中,我们通常使用ActiveRecord库来创建模型,通过继承`ApplicationRecord`类并定义属性和关系。 2. **View**:视图负责展示用户界面。Rails提供了ERB(Embedded Ruby)模板,允许在HTML中嵌入Ruby代码,实现...

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

    rails2.3.2

    描述中的 "ruby and rails 的框架rails-2.3.3.zip" 提到的是 Rails 的另一个版本 2.3.3,尽管与标题中的版本号不完全匹配,但我们可以推断这是关于 Rails 2.3.x 系列的讨论。这个压缩包很可能包含了 Rails 框架的源...

    rails指南 中文版

    Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...

    Advanced Rails

    Advanced Rails,英文版,一本关于Rails的好书!

    [Rails] Crafting Rails Applications (英文版)

    [Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...

    Ruby+for+Rails

    例如,`rails generate model Book title:string author:string`将创建一个`Book`模型,包含`title`和`author`属性。 6. **数据库迁移(Migrations)** Rails使用迁移来管理数据库结构的变化。`rails generate ...

    Rails相关电子书汇总

    标题 "Rails相关电子书汇总" 暗示了这个压缩包包含了关于Ruby on Rails框架的电子书籍资源。Ruby on Rails,通常简称为Rails,是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,以...

    rails 2.3.2离线安装rails 2.3.2离线安装

    rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...

    rails敏捷开发的购物车系统

    在本文中,我们将深入探讨如何使用Rails敏捷开发技术构建一个购物车系统,特别是在参考《rails敏捷开发第四版》中的示例。Rails 3.2.6是本文的基础框架,它是一个强大的Ruby Web应用程序框架,以其MVC(模型-视图-...

    Rails recipes

    Rails Recipes是一本针对Ruby on Rails框架的实用书籍,它收集了一系列高效解决问题的技巧和方法,也被称为“Rails开发者的宝典”。作者们通过分享自己的经验和见解,为Rails程序员提供了一本既有实际操作指导又有...

    RAILS2.1的中文版资料

    在Rails 2.1中,脏数据追踪被进一步增强,使得开发者可以更方便地检查哪些属性发生了更改,这对于实现复杂的数据验证逻辑非常有帮助。 **Gem依赖管理(Gem Dependencies)** Rails 2.1引入了一种新的方式来管理...

    Ruby on Rails安装指南(Ruby 1.8.6+Rails 2.0.2)

    随着互联网的快速发展,Ruby on Rails作为一种流行的Web开发框架,在开发领域得到了广泛的应用。它的简易性与高效性让许多开发者为之青睐。而想要在本地环境搭建Ruby on Rails的开发环境,掌握正确的安装步骤是基础...

    rails 项目起步示例

    Rails是Ruby语言的一个著名Web开发框架,全称为Ruby on Rails,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码可读性。本示例"rails项目起步示例"是一个购物系统,非常适合初学者入门学习。 ...

Global site tag (gtag.js) - Google Analytics