Ruby on rails开发从头来(四十一)- ActiveRecord基础(存储结构化数据)

有时,能够在某个属性中直接存储任意的ruby对象是很方便的,一种办法就是Active Record支持序列化,将一个ruby对象变为一个YMAL字符串,并且将这个字符串存储到属性对应的数据库字段中。在数据库定义中,这个字段必须为text类型。

因为Active Record将数据库中的Char型和text型映射为ruby的string型,所以如果我们需要告诉Active Record使用序列化功能,例如,我们想知道某个客户进行的最后的5次消费,我们创建一个含有text类型字段的表来保存信息:

create table purchases (
id int not null auto_increment,
name varchar(100) not null,
last_five text,
primary key (id)
);

在转换这个表的Active Record类中,我们要使用serialize()声明,来告诉Active Record要排列对象:

class Purchase < ActiveRecord::Base
serialize :last_five
# ...
end

当我们创建了一个新的Purchase对象,我们可以给last_five列赋任何值,在这个例子里,我们给last_five列设置一个字符串数组,

purchase = Purchase.new
purchase.name = "Dave Thomas"
purchase.last_five = [ 'shoes', 'shirt', 'socks', 'ski mask', 'shorts' ]
purchase.save

当我们读入它的时候,这个属性已经被设置为数组:

purchase = Purchase.find_by_name("Dave Thomas")
pp purchase.last_five
pp purchase.last_five[3]

代码的输出为:

["shoes", "shirt", "socks", "ski mask", "shorts"]
"ski mask"

尽管这个功能是很强大且便利的,但是只有当你不打算在ruby以外的项目中使用这些序列化的信息,除非那个程序也能够使用YMAL格式。特别是,这些信息很难被SQL查询所利用,你也许会考虑使用聚合(aggregation)来替代,在后面我们会介绍这种办法来达到相同的效果。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索字符串
, in-app purchase
, active
, 字段
, record
一个
rails activerecord、ruby on rails、ruby on rails 教程、ruby rails、ruby on rails pdf,以便于您获取更多的相关知识。

时间: 2024-10-25 23:19:14

Ruby on rails开发从头来(四十一)- ActiveRecord基础(存储结构化数据)的相关文章

Ruby on rails开发从头来(windows)(四)-第一个添删查改例子

在上一篇Ruby on rails开发从头来(windows)(三)-实现页面间的跳转中,我们创建了两个页面来进行跳转迁移,这次我们来写一个单表维护的添删查改的例子. 1.这次我们重新创建一个项目depot,按照上篇中的步骤,创建depot项目. 2.创建数据库. 你可以使用rails的命令行,通过mysql创建,先定位到depot目录,使用命令: depot> mysql -u root –p 密码为空,连接mysql后执行下面的命令: mysql> create database depo

Ruby on rails开发从头来(windows)(三)-实现页面间的跳转

在上篇随笔Ruby on rails开发从头来(windows)(二)-创建项目和第一个Hello world 中,我们介绍了如何使用InstantRails创建一个项目和编写一个简单的Helloworld页面,今天在上次的基础上,写一个简单的页面跳转. 1.将appcontrollers目录下的say_controller.rb文件的内容改成下面这样: class SayController < ApplicationController def Hello @time = Time.now

《Effective Ruby:改善Ruby程序的48条建议》一第10条:推荐使用Struct而非Hash存储结构化数据

第10条:推荐使用Struct而非Hash存储结构化数据 哈希表是Ruby程序员经常使用的一种有用的.通用的数据结构.Hash类提供了使用哈希表的简单的接口,与数组一样,它是Ruby的重要部分之一,该类有自己专用的语法来创建新的实例.当需要使用键值对时,Hash类绝对是首选.事实上,Ruby程序员在任何时候都会使用哈希,甚至方法的参数关键字也是使用Hash类语法糖来实现的.哈希如此通用,因此能被用来对类型进行模拟,比如数组.集合,甚至基本对象.在OOP语言中,当用到结构化数据时,我们往往有比哈希

Ruby on rails开发从头来(windows)(一)

使用InstantRails快速搭建Ruby On Rails开发环境 一直对Ruby on Rails抱有很大的兴趣,想看看这个被很多人称道的东西,但是一直在做windows下的开发,对于Ruby on Rails的开发环境搭建还是很头疼,这也是一直没有开始研究Ruby on rails的原因.刚刚在javaeye看到了InstantRails,一个All In One的套件,可以帮助你快速搭建Ruby On Rails开发环境,就立即下了一个试了试,还好,比较顺,起码可以跑起来自带的例子了.

Ruby on rails开发从头来(四十三)- ActiveRecord基础(连接数据库)

Active Record抽象了数据库连接的概念,帮助应用程序来处理底层的数据库链接的细节,作为替代,Active Record使用通用的调用,将细节委托给一组数据库适配器. 可以使用establish_connection( )方法来制定连接,下面的例子创建了一个mysql数据库连接,数据库的名字是railsdb,服务器的Host名为dbserver.com,用户名为railsuser,密码为railspw. ActiveRecord::Base.establish_connection( :

Ruby on rails开发从头来(windows)(十一)-订单(Order)

在上次的内容里,我们实现了清空购物车和金额的格式化处理.这次实现订单的模块. 1.首先,我们要在数据库里创建Order表,创建表的Sql如下: create table orders ( id int not null auto_increment, name varchar(100) not null, email varchar(255) not null, address text not null, pay_type char(10) not null, primary key (id)

Ruby on rails开发从头来(五十一)- ActiveRecord基础(并发处理)

在学习Rails中的并发处理的处理前,我们先简单了解下并发处理的概念. 在有多个处理同时访问同一个数据库的应用程序中,可能会出现这样的情况,因为一个处理更新了数据库中的行,而使得另一个处理中持有的数据变得陈旧了.例如,A和B先后从数据库中提取了相同的数据,并都做了修改,这时B先将自己的修改更新会数据库,稍后,A将自己的修改更新回数据库,这时将会覆盖B所作的修改,当B再次提取数据库后,看到的是A修改的结果,而不是自己的. 一个解决办法就是将更新的表或者行进行锁定,防止其他程序进行更新或者访问,锁定

Ruby on rails开发从头来(四十)- ActiveRecord基础(Boolean属性)

一些数据库支持boolean类型,而另一些则不支持,这使得Active Record要抽象boolean类型变得困难.例如,如果数据库不支持boolean类型,有的开发者使用char(1)来替代,而内容使用"t"和"f"来表示true和false,而另外一些开发者使用integer类型,0是false,1是true.即使数据库支持boolean类型,在内部也许还是使用0和1来存储. 在Ruby里,在条件判断中,数字0和字符f都被认为是true值,这就意味着如果你直接

Ruby on rails开发从头来(五十四)- ActiveRecord基础(指定关联关系)

Rails支持三种表间关联关系,一对一,一对多,多对多,你需要在Model中加入声明来标识这些关联:has_one,has_many,belongs_to,has_and_belongs_to_many. 一对一关联关系可能存在于象订单和发票这样的关系,一个订单只能有一个发票,在Rails中,我们这样指明: class Order < ActiveRecord::Base has_one :invoice . . . class Invoice < ActiveRecord::Base bel