`

关于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登录和验证插件http_authentication restful-authentication

    Rails是一个流行的Ruby编程语言的Web应用框架,以其MVC(模型-视图-控制器)架构模式和DRY(Don't Repeat Yourself)原则而闻名。在Rails应用中,用户认证和授权是常见的需求,用于保护应用资源的安全。...

    Rails项目源代码

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

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...

    Rails

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

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

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

    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 ...

    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 框架的源...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    rails指南 中文版

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

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

    Ruby on Rails 安装指南 Ruby on Rails 安装指南是指安装 Ruby 1.8.6 和 Rails 2.0.2 的详细步骤。首先,需要下载 Ruby One-Click Installer 版本,并安装 Ruby。然后,下载 Rails 2.0.2 版本,并安装。接下来,...

    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敏捷开发的购物车系统

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

    Rails recipes

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

Global site tag (gtag.js) - Google Analytics